1use actix_utils::future::ready;
4use actix_web::{middleware::NormalizePath, web};
5use actix_web_httpauth::middleware::HttpAuthentication;
6
7use crate::{
8 config::auth::middleware::validator,
9 controller::{
10 areas, base_layer_image, blossoms, config, drawings, guided_tours, layers, map,
11 map_collaborators, plant_layer, plantings, plants, seed, sse, timeline, users,
12 },
13};
14
15pub fn config(cfg: &mut web::ServiceConfig) {
17 let auth = HttpAuthentication::bearer(|req, credentials| ready(validator(req, &credentials)));
18
19 let routes = web::scope("/api")
20 .service(
21 web::scope("/seeds")
22 .service(seed::find)
23 .service(seed::create)
24 .service(seed::delete_by_id)
25 .service(seed::find_by_id)
26 .service(seed::edit_by_id)
27 .service(seed::archive),
28 )
29 .service(
30 web::scope("/plants")
31 .service(plants::find)
32 .service(plants::find_by_id),
33 )
34 .service(
35 web::scope("/maps")
36 .service(map::find)
37 .service(map::find_by_id)
38 .service(map::create)
39 .service(map::update)
40 .service(map::update_geometry)
41 .service(map::delete_by_id)
42 .service(
43 web::scope("/{map_id}")
44 .service(
45 web::scope("/layers")
46 .service(layers::find)
47 .service(layers::find_by_id)
48 .service(layers::create)
49 .service(layers::update)
50 .service(layers::delete)
51 .service(
52 web::scope("/base/images")
53 .service(base_layer_image::create)
54 .service(base_layer_image::update)
55 .service(base_layer_image::delete),
56 )
57 .service(
58 web::scope("/base/{layer_id}/images")
59 .service(base_layer_image::find),
60 )
61 .service(
62 web::scope("/plants")
63 .service(plant_layer::heatmap)
64 .service(plant_layer::find_relations)
65 .service(
66 web::scope("/plantings")
67 .service(plantings::find)
68 .service(plantings::create)
69 .service(plantings::update)
70 .service(plantings::delete),
71 ),
72 ),
73 )
74 .service(
75 web::scope("/drawings")
76 .service(drawings::find)
77 .service(drawings::create)
78 .service(drawings::update)
79 .service(drawings::delete),
80 )
81 .service(
82 web::scope("/collaborators")
83 .service(map_collaborators::create)
84 .service(map_collaborators::find)
85 .service(map_collaborators::delete),
86 )
87 .service(
88 web::scope("/areas")
89 .service(areas::create)
90 .service(areas::find)
91 .service(areas::update)
92 .service(areas::delete),
93 )
94 .service(timeline::get_timeline),
95 ),
96 )
97 .service(
98 web::scope("/tours")
99 .service(guided_tours::setup)
100 .service(guided_tours::find_by_user)
101 .service(guided_tours::update),
102 )
103 .service(
104 web::scope("/users")
105 .service(users::create)
106 .service(users::find),
107 )
108 .service(web::scope("/blossoms").service(blossoms::gain))
109 .service(web::scope("/timeline").service(timeline::get_timeline))
110 .service(web::scope("/updates/maps").service(sse::connect_to_map))
111 .wrap(NormalizePath::trim())
112 .wrap(auth);
113
114 let config_route = web::scope("/api/config").service(config::get);
115
116 cfg.service(config_route).service(routes);
117}