1 #include <thread>
2 #include <iostream>
3
4 #include <silicon/api.hh>
5 #include <silicon/middleware_factories.hh>
6 #include <silicon/api_description.hh>
7 #include <silicon/backends/mhd.hh>
8 #include <silicon/middlewares/sqlite_connection.hh>
9 #include <silicon/middlewares/sqlite_orm.hh>
10 #include <silicon/clients/libcurl_client.hh>
11 #include <silicon/sql_rest.hh>
12
13 #include "symbols.hh"
14
15 using namespace s;
16
17 typedef decltype(iod::D(_id(_auto_increment, _primary_key) = int(),
18 _name = std::string(),
19 _age = int(),
20 _address = std::string(),
21 _city(_read_only) = std::string()
22 )) User;
23
24
main()25 int main()
26 {
27 using namespace sl;
28
29 auto api = http_api(
30
31 _user = sql_rest<sqlite_orm<User>>(
32 _before_create = [] (User& u, sqlite_connection& c) { u.city = "Paris"; }
33 ) // Crud for the User object.
34 );
35
36 auto factories = middleware_factories(
37 sqlite_connection_factory("/tmp/sl_test_crud.sqlite", _synchronous = 1), // sqlite middleware.
38 sqlite_orm_factory<User>("users") // Orm middleware.
39 );
40
41 std::cout << api_description(api) << std::endl;
42
43 // Start server.
44 auto server = mhd_json_serve(api, factories, 12345, _non_blocking);
45
46 // Test.
47 auto c = libcurl_json_client(api, "127.0.0.1", 12345);
48
49 // // Insert.
50 auto insert_r = c.http_post.user(_name = "matt", _age = 12, _address = "USA");
51 std::cout << json_encode(insert_r) << std::endl;
52 assert(insert_r.status == 200);
53 int id = insert_r.response.id;
54
55 // Get by id.
56 auto get_r = c.http_get.user(_id = id);
57 std::cout << json_encode(get_r) << std::endl;;
58 assert(get_r.status == 200);
59 assert(get_r.response.name == "matt");
60 assert(get_r.response.age == 12);
61 assert(get_r.response.city == "Paris");
62 assert(get_r.response.address == "USA");
63
64 auto get_r2 = c.http_get.user(_id = 42);
65 std::cout << json_encode(get_r2) << std::endl;;
66 assert(get_r2.status == 404);
67
68 // Update
69 auto update_r = c.http_put.user(_id = id, _name = "john", _age = 42, _address = "Canada");
70 std::cout << json_encode(update_r) << std::endl;;
71 auto get_r3 = c.http_get.user(_id = id);
72 std::cout << json_encode(get_r3) << std::endl;;
73 assert(get_r3.status == 200);
74 assert(get_r3.response.id == id);
75 assert(get_r3.response.name == "john");
76 assert(get_r3.response.age == 42);
77 assert(get_r3.response.address == "Canada");
78
79
80 // Destroy.
81 auto destroy_r = c.http_delete.user(_id = id);
82 assert(destroy_r.status == 200);
83
84 auto get_r4 = c.http_get.user(_id = id);
85 assert(get_r4.status == 404);
86 }
87