From 2347e97dfa685ce53d87ab7a07bfbe3b90220741 Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 16 Dec 2025 16:17:33 +0100 Subject: [PATCH] + caqti global_fee --- src/http_management.ml | 10 ++-- src/pg.ml | 128 ++++++++++++++++++++++++----------------- 2 files changed, 81 insertions(+), 57 deletions(-) diff --git a/src/http_management.ml b/src/http_management.ml index 53466fe3..65842da2 100644 --- a/src/http_management.ml +++ b/src/http_management.ml @@ -464,17 +464,17 @@ module Global_fees = struct } let do_ ~db_conn v = - let* global_fees_opt = + let* global_fees = let start_date = v.GlobalFees.start_date in let end_date = v.GlobalFees.end_date in - Pg.lookup_global_fee_by_time db_conn ~start_date ~end_date + Pg.lookup_global_fees_by_time db_conn ~start_date ~end_date |> unwrap_err_caqti in - match global_fees_opt with - | Some _ -> Error "global-fees already setup" - | None -> + match global_fees with + | [] -> let+ () = Pg.insert_global_fee db_conn v |> unwrap_err_caqti in () + | _l -> Error "global-fees already setup" let jsont = GlobalFees.jsont diff --git a/src/pg.ml b/src/pg.ml index 39357310..5cd73afe 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -17,6 +17,7 @@ open Crypto open Bin_type open Api +(* TODO move some caqti types to its module *) module Caqti_type = struct include Caqti_type @@ -48,6 +49,59 @@ module Caqti_type = struct ~decode:(fun s -> Api.decode (Jsont.list AccountRestriction.jsont) s) string + let global_fee = + let master_sig = Bin_sig.GlobalFees.caqti in + custom + ~encode:(fun + GlobalFees. + { + start_date; + end_date; + history_fee; + account_fee; + purse_fee; + history_expiration; + purse_account_limit; + purse_timeout; + master_sig; + } + -> + Ok + ( start_date, + end_date, + history_fee, + account_fee, + purse_fee, + history_expiration, + purse_account_limit, + purse_timeout, + master_sig )) + ~decode:(fun + ( start_date, + end_date, + history_fee, + account_fee, + purse_fee, + history_expiration, + purse_account_limit, + purse_timeout, + master_sig ) + -> + Ok + { + start_date; + end_date; + history_fee; + account_fee; + purse_fee; + history_expiration; + purse_account_limit; + purse_timeout; + master_sig; + }) + Caqti_type.( + t9 time time amount amount amount time_span int32 time_span master_sig) + include struct (* alias for hash *) @@ -82,6 +136,7 @@ let preflight = in fun (module Conn : CONN) -> Syntax.list_iter (fun p -> Conn.exec p ()) l +(* TODO return type *) let lookup_signing_key = let lookup_signing_key = Caqti_type.(eddsa_pub ->? t3 time time time) @@ -107,6 +162,7 @@ let activate_signing_key = Conn.exec insert_signkey (pub, stamp_start, stamp_expire, stamp_end, master_sig) +(* TODO return type *) let lookup_denomination_key = let lookup_denomination_key = Caqti_type.( @@ -231,6 +287,7 @@ let disable_auditor = fun (module Conn : CONN) ~auditor_pub ~change_date -> Conn.exec update_auditor (auditor_pub, "", "", false, change_date) +(* TODO return type *) let lookup_wire_fee_by_time = let lookup_wire_fee_by_time = Caqti_type.(t3 wire_method time time ->? t2 amount amount) @@ -258,54 +315,35 @@ let insert_wire_fee = Conn.exec insert_wire_fee (wire_method, start_date, end_date, wire_fee, closing_fee, master_sig) -let lookup_global_fee_by_time = - let lookup_global_fee_by_time = - let global_fee = - Caqti_type.(t6 amount amount amount time_span time_span int32) - in +let get_global_fees = + let get_global_fees = + Caqti_type.(time ->* global_fee) + "SELECT start_date, end_date, (history_fee).*, (account_fee).*, \ + (purse_fee).*, purse_timeout, history_expiration, purse_account_limit, \ + master_sig FROM global_fee WHERE start_date >= $1" + in + fun (module Conn : CONN) ~start_date -> + Conn.collect_list get_global_fees start_date + +let lookup_global_fees_by_time = + let lookup_global_fees_by_time = Caqti_type.(t2 time time ->? global_fee) - "SELECT (history_fee).*, (account_fee).*, (purse_fee).*, purse_timeout, \ - history_expiration, purse_account_limit FROM global_fee WHERE end_date \ - > $1 AND start_date < $2;" + "SELECT start_date, end_date, (history_fee).*, (account_fee).*, \ + (purse_fee).*, history_expiration, purse_account_limit, purse_timeout, \ + master_sig FROM global_fee WHERE end_date > $1 AND start_date < $2" in fun (module Conn : CONN) ~start_date ~end_date -> - Conn.find_opt lookup_global_fee_by_time (start_date, end_date) + Conn.collect_list lookup_global_fees_by_time (start_date, end_date) let insert_global_fee = let insert_global_fee = - let master_sig = Bin_sig.GlobalFees.caqti in - Caqti_type.( - t9 time time amount amount amount time_span time_span int32 master_sig - ->. unit) + Caqti_type.(global_fee ->. unit) "INSERT INTO global_fee (start_date, end_date, history_fee, account_fee, \ - purse_fee, purse_timeout, history_expiration, purse_account_limit, \ + purse_fee, history_expiration, purse_account_limit, purse_timeout, \ master_sig) VALUES ($1, $2, ($3,$4), ($5,$6), ($7,$8), $9, $10, $11, \ $12)" in - fun (module Conn : CONN) - GlobalFees. - { - start_date; - end_date; - history_fee; - account_fee; - purse_fee; - history_expiration; - purse_account_limit; - purse_timeout; - master_sig; - } - -> - Conn.exec insert_global_fee - ( start_date, - end_date, - history_fee, - account_fee, - purse_fee, - purse_timeout, - history_expiration, - purse_account_limit, - master_sig ) + fun (module Conn : CONN) v -> Conn.exec insert_global_fee v let lookup_wire_timestamp = let lookup_wire_timestamp = @@ -524,20 +562,6 @@ let get_wire_fees = { wire_fee; closing_fee; start_date; end_date; sig_ }) l -let get_global_fees = - let get_global_fees = - let master_sig = Bin_sig.GlobalFees.caqti in - Caqti_type.( - time - ->* t9 time time amount amount amount time_span time_span int master_sig) - "SELECT start_date, end_date, (history_fee).*, (account_fee).*, \ - (purse_fee).*, purse_timeout, history_expiration, purse_account_limit, \ - master_sig FROM global_fee WHERE start_date >= $1" - in - fun (module Conn : CONN) ~start_date -> - Conn.collect_list get_global_fees start_date - -(* TODO record types for some results *) (* TODO iterate_denominations iterate_active_signkeys