backend/config/
routes.rs

1//! Routes in the backend.
2
3use 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
15/// Defines all routes of the backend and which functions they map to.
16pub 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}