Line data Source code
1 : /*
2 : This file is part of TALER
3 : Copyright (C) 2023, 2024 Taler Systems SA
4 :
5 : TALER is free software; you can redistribute it and/or modify it under the
6 : terms of the GNU General Public License as published by the Free Software
7 : Foundation; either version 3, or (at your option) any later version.
8 :
9 : TALER is distributed in the hope that it will be useful, but WITHOUT ANY
10 : WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 : A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 :
13 : You should have received a copy of the GNU General Public License along with
14 : TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
15 : */
16 : /**
17 : * @file src/backenddb/insert_token_family.c
18 : * @brief Implementation of the insert_token_family function for Postgres
19 : * @author Christian Blättler
20 : */
21 : #include "platform.h"
22 : #include <taler/taler_pq_lib.h>
23 : #include "merchant-database/insert_token_family.h"
24 : #include "helper.h"
25 :
26 :
27 : enum GNUNET_DB_QueryStatus
28 7 : TALER_MERCHANTDB_insert_token_family (
29 : struct TALER_MERCHANTDB_PostgresContext *pg,
30 : const char *instance_id,
31 : const char *token_family_slug,
32 : const struct TALER_MERCHANTDB_TokenFamilyDetails *details)
33 : {
34 : const char *kind;
35 :
36 7 : switch (details->kind)
37 : {
38 2 : case TALER_MERCHANTDB_TFK_Discount:
39 2 : kind = "discount";
40 2 : break;
41 5 : case TALER_MERCHANTDB_TFK_Subscription:
42 5 : kind = "subscription";
43 5 : break;
44 0 : default:
45 0 : GNUNET_break (0);
46 0 : return GNUNET_DB_STATUS_HARD_ERROR;
47 : }
48 7 : GNUNET_assert (NULL != pg->current_merchant_id);
49 7 : GNUNET_assert (0 == strcmp (instance_id,
50 : pg->current_merchant_id));
51 7 : TMH_PQ_prepare_anon (pg,
52 : "INSERT INTO merchant_token_families"
53 : "(slug"
54 : ",name"
55 : ",description"
56 : ",description_i18n"
57 : ",extra_data"
58 : ",valid_after"
59 : ",valid_before"
60 : ",duration"
61 : ",validity_granularity"
62 : ",start_offset"
63 : ",kind)"
64 : " VALUES ($1, $2, $3, $4::TEXT::JSONB,"
65 : " $5::TEXT::JSONB, $6, $7, $8, $9, $10, $11)"
66 : " ON CONFLICT DO NOTHING;");
67 : {
68 7 : struct GNUNET_PQ_QueryParam params[] = {
69 7 : GNUNET_PQ_query_param_string (token_family_slug),
70 7 : GNUNET_PQ_query_param_string (details->name),
71 7 : GNUNET_PQ_query_param_string (details->description),
72 7 : TALER_PQ_query_param_json (details->description_i18n),
73 7 : NULL == details->extra_data
74 7 : ? GNUNET_PQ_query_param_null ()
75 7 : : TALER_PQ_query_param_json (details->extra_data),
76 7 : GNUNET_PQ_query_param_timestamp (&details->valid_after),
77 7 : GNUNET_PQ_query_param_timestamp (&details->valid_before),
78 7 : GNUNET_PQ_query_param_relative_time (&details->duration),
79 7 : GNUNET_PQ_query_param_relative_time (&details->validity_granularity),
80 7 : GNUNET_PQ_query_param_relative_time (&details->start_offset),
81 7 : GNUNET_PQ_query_param_string (kind),
82 : GNUNET_PQ_query_param_end
83 : };
84 :
85 7 : return GNUNET_PQ_eval_prepared_non_select (pg->conn,
86 : "",
87 : params);
88 : }
89 : }
|