aboutsummaryrefslogtreecommitdiff
path: root/backend/src/services/maps_service.zig
blob: d634383b8938f441f5ccf614bb919ca330f83373 (plain)
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
const httpz = @import("httpz");

const maps_repo = @import("../repos/maps_repo.zig");
const markers_repo = @import("../repos/markers_repo.zig");
const common = @import("common.zig");

pub fn list(env: *common.Env, _: *httpz.Request, res: *httpz.Response) !void {
    const maps = try maps_repo.get_maps(res.arena, env.conn);
    try res.json(maps.items, .{});
}

pub fn get(env: *common.Env, req: *httpz.Request, res: *httpz.Response) !void {
    const id = req.param("id").?;
    const map = try maps_repo.get_map(res.arena, env.conn, id);
    try res.json(map, .{});
}

const CreateMap = struct { name: []const u8 };

pub fn create(env: *common.Env, req: *httpz.Request, res: *httpz.Response) !void {
    const payload = try common.with_body(CreateMap, req);
    const map = try maps_repo.create(res.arena, env.conn, payload.name);
    try res.json(map, .{});
}

const UpdateMap = struct { name: []const u8 };

pub fn update(env: *common.Env, req: *httpz.Request, res: *httpz.Response) !void {
    const id = req.param("id").?;
    const payload = try common.with_body(UpdateMap, req);
    const map = try maps_repo.update(env.conn, id, payload.name);
    try res.json(map, .{});
}

pub fn delete(env: *common.Env, req: *httpz.Request, _: *httpz.Response) !void {
    const id = req.param("id").?;
    try markers_repo.delete_by_map_id(env.conn, id);
    try maps_repo.delete(env.conn, id);
}