-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrecurrings_api.cpp
More file actions
104 lines (79 loc) · 3.78 KB
/
recurrings_api.cpp
File metadata and controls
104 lines (79 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//=======================================================================
// Copyright (c) 2013-2020 Baptiste Wicht.
// Distributed under the terms of the MIT License.
// (See accompanying file LICENSE or copy at
// http://opensource.org/licenses/MIT)
//=======================================================================
#include <set>
#include "api/server_api.hpp"
#include "api/recurrings_api.hpp"
#include "recurring.hpp"
#include "accounts.hpp"
#include "guid.hpp"
#include "http.hpp"
#include "data.hpp"
using namespace budget;
void budget::add_recurrings_api(const httplib::Request& req, httplib::Response& res) {
if (!req.has_param("input_name") || !req.has_param("input_amount") || !req.has_param("input_account") || !req.has_param("input_recurs")
|| !req.has_param("input_type")) {
return api_error(req, res, "Invalid parameters");
}
recurring recurring;
recurring.guid = generate_guid();
recurring.account = get_account(budget::to_number<size_t>(req.get_param_value("input_account"))).name;
recurring.name = req.get_param_value("input_name");
recurring.amount = money_from_string(req.get_param_value("input_amount"));
recurring.recurs = req.get_param_value("input_recurs");
recurring.type = req.get_param_value("input_type");
if (recurring.recurs != "monthly" && recurring.recurs != "weekly") {
api_error(req, res, "Invalid recurring frequency");
return;
}
if (recurring.type != "earning" && recurring.type != "expense") {
api_error(req, res, "Invalid recurring type");
return;
}
auto id = add_recurring(std::move(recurring));
api_success(req, res, "Recurring Operation" + to_string(id) + " has been created", to_string(id));
}
void budget::edit_recurrings_api(const httplib::Request& req, httplib::Response& res) {
if (!req.has_param("input_id") || !req.has_param("input_name") || !req.has_param("input_amount") || !req.has_param("input_account")
|| !req.has_param("input_recurs")) {
return api_error(req, res, "Invalid parameters");
}
auto id = req.get_param_value("input_id");
if (!recurring_exists(budget::to_number<size_t>(id))) {
return api_error(req, res, "recurring " + id + " does not exist");
}
auto recurring = recurring_get(budget::to_number<size_t>(id));
auto previous_recurring = recurring; // Temporary Copy
recurring.account = get_account(budget::to_number<size_t>(req.get_param_value("input_account"))).name;
recurring.name = req.get_param_value("input_name");
recurring.amount = money_from_string(req.get_param_value("input_amount"));
recurring.recurs = req.get_param_value("input_recurs");
if (recurring.recurs != "monthly" && recurring.recurs != "weekly") {
return api_error(req, res, "Invalid recurring frequency");
}
edit_recurring(recurring, previous_recurring);
api_success(req, res, "Recurring " + to_string(recurring.id) + " has been modified");
}
void budget::delete_recurrings_api(const httplib::Request& req, httplib::Response& res) {
if (!req.has_param("input_id")) {
return api_error(req, res, "Invalid parameters");
}
auto id = req.get_param_value("input_id");
if (!recurring_exists(budget::to_number<size_t>(id))) {
return api_error(req, res, "The recurring " + id + " does not exit");
}
recurring_delete(budget::to_number<size_t>(id));
api_success(req, res, "Recurring " + id + " has been deleted");
}
void budget::list_recurrings_api(const httplib::Request& req, httplib::Response& res) {
std::stringstream ss;
for (auto& recurring : all_recurrings()) {
data_writer writer;
recurring.save(writer);
ss << writer.to_string() << std::endl;
}
api_success_content(req, res, ss.str());
}