.
This commit is contained in:
parent
68484b93ac
commit
c69b98c78a
4 changed files with 121 additions and 5 deletions
|
|
@ -126,3 +126,16 @@ let management_wirefee req server _env =
|
|||
Ok ""
|
||||
in
|
||||
respond_with_res res req
|
||||
|
||||
let management_global_fees_jsont = GlobalFees.jsont
|
||||
|
||||
let management_global_fees req server _env =
|
||||
let open Management in
|
||||
let db_conn = Vif.Server.device Devices.db_connection server in
|
||||
let res =
|
||||
let* v = Vif.Request.of_json req |> unwrap_err_msg in
|
||||
let* () = verify_global_fees v in
|
||||
let* () = update_global_fees ~db_conn v in
|
||||
Ok ""
|
||||
in
|
||||
respond_with_res res req
|
||||
|
|
|
|||
|
|
@ -327,14 +327,13 @@ let update_wirefee_setup ~db_conn
|
|||
closing_fee;
|
||||
wire_fee;
|
||||
} =
|
||||
let* fees_opt =
|
||||
let* wirefee_opt =
|
||||
Pg.lookup_wirefee_by_time db_conn ~wire_method ~start_date:fee_start
|
||||
~end_date:fee_end
|
||||
|> unwrap_err_caqti
|
||||
in
|
||||
match fees_opt with
|
||||
| Some (_wire_fee, _closing_fee) ->
|
||||
Error "wire-fee already setup? wire-fee mismatch"
|
||||
match wirefee_opt with
|
||||
| Some (_wire_fee, _closing_fee) -> Error "wire-fee already setup"
|
||||
| None ->
|
||||
let+ () =
|
||||
Pg.insert_wirefee db_conn ~wire_method ~start_date:fee_start
|
||||
|
|
@ -343,4 +342,56 @@ let update_wirefee_setup ~db_conn
|
|||
in
|
||||
()
|
||||
|
||||
(*[@@@ocaml.warning "-27"]*)
|
||||
let verify_global_fees
|
||||
GlobalFees.
|
||||
{
|
||||
start_date;
|
||||
end_date;
|
||||
history_fee;
|
||||
account_fee;
|
||||
purse_fee;
|
||||
history_expiration= _;
|
||||
purse_account_limit;
|
||||
purse_timeout= _;
|
||||
master_sig;
|
||||
} =
|
||||
(* TODO time..... *)
|
||||
let dummy_relative_time = None in
|
||||
let dummy_amount =
|
||||
Amount.make ~sign:None ~currency:"EUR" ~value:0_L ~fraction:0_l
|
||||
|> Result.get_ok
|
||||
in
|
||||
(* TODO what is kyc_timeout, kyc_fee ? *)
|
||||
let kyc_timeout = dummy_relative_time in
|
||||
let kyc_fee = dummy_amount in
|
||||
(* TODO force integer value to be a valid int64/int32 and in valid json integer range
|
||||
in jsont encodings *)
|
||||
let purse_account_limit = Int32.of_int purse_account_limit in
|
||||
(* * *)
|
||||
let open Bin_sig.GlobalFees in
|
||||
verify ~key:Config.Exchange.master_public_key master_sig
|
||||
{
|
||||
start_date;
|
||||
end_date;
|
||||
purse_timeout= dummy_relative_time;
|
||||
kyc_timeout;
|
||||
history_expiration= dummy_relative_time;
|
||||
history_fee;
|
||||
kyc_fee;
|
||||
account_fee;
|
||||
purse_fee;
|
||||
purse_account_limit;
|
||||
}
|
||||
|
||||
let update_global_fees ~db_conn v =
|
||||
let* global_fees_opt =
|
||||
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
|
||||
|> unwrap_err_caqti
|
||||
in
|
||||
match global_fees_opt with
|
||||
| Some _ -> Error "global-fees already setup"
|
||||
| None ->
|
||||
let+ () = Pg.insert_global_fee db_conn v |> unwrap_err_caqti in
|
||||
()
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ let routes =
|
|||
--> management_auditors_disable;
|
||||
post (v "management" / "wire-fee") management_wirefee_jsont
|
||||
--> management_wirefee;
|
||||
post (v "management" / "global-fees") management_global_fees_jsont
|
||||
--> management_global_fees;
|
||||
]
|
||||
|
||||
let () =
|
||||
|
|
|
|||
50
src/pg.ml
50
src/pg.ml
|
|
@ -247,3 +247,53 @@ let insert_wirefee =
|
|||
->
|
||||
Conn.exec insert_wirefee
|
||||
(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 time int32) in
|
||||
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;"
|
||||
in
|
||||
fun (module Conn : CONN) ~start_date ~end_date ->
|
||||
Conn.find_opt lookup_global_fee_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 time int32 master_sig ->. unit)
|
||||
"INSERT INTO global_fee (start_date, end_date, history_fee, account_fee, \
|
||||
purse_fee, purse_timeout, history_expiration, purse_account_limit, \
|
||||
master_sig) VALUES ($1, $2, ($3,$4), ($5,$6), ($7,$8), $9, $10, $11, \
|
||||
$12)"
|
||||
in
|
||||
fun (module Conn : CONN)
|
||||
Api.GlobalFees.
|
||||
{
|
||||
start_date;
|
||||
end_date;
|
||||
history_fee;
|
||||
account_fee;
|
||||
purse_fee;
|
||||
history_expiration= _;
|
||||
purse_account_limit;
|
||||
purse_timeout= _;
|
||||
master_sig;
|
||||
}
|
||||
->
|
||||
(* TODO time *)
|
||||
let purse_account_limit = Int32.of_int purse_account_limit in
|
||||
let purse_timeout = None in
|
||||
let history_expiration = None in
|
||||
Conn.exec insert_global_fee
|
||||
( start_date,
|
||||
end_date,
|
||||
history_fee,
|
||||
account_fee,
|
||||
purse_fee,
|
||||
purse_timeout,
|
||||
history_expiration,
|
||||
purse_account_limit,
|
||||
master_sig )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue