30 lines
980 B
Zig
30 lines
980 B
Zig
const std = @import("std");
|
|
const root = @import("root");
|
|
const http = @import("http");
|
|
const Uuid = @import("util").Uuid;
|
|
|
|
const RegistrationRequest = @import("api").RegistrationRequest;
|
|
const utils = @import("../controllers.zig").utils;
|
|
|
|
const RequestServer = root.RequestServer;
|
|
const RouteArgs = http.RouteArgs;
|
|
|
|
pub const create = struct {
|
|
pub const method = .POST;
|
|
pub const path = "/users";
|
|
pub fn handler(srv: *RequestServer, ctx: *http.server.Context, _: RouteArgs) !void {
|
|
const info = try utils.parseRequestBody(RegistrationRequest, ctx);
|
|
defer utils.freeRequestBody(info, ctx.alloc);
|
|
|
|
var api = try utils.getApiConn(srv, ctx);
|
|
defer api.close();
|
|
|
|
const user = api.register(info) catch |err| switch (err) {
|
|
error.UsernameTaken => return utils.respondError(ctx, .bad_request, "Username Unavailable"),
|
|
else => return err,
|
|
};
|
|
|
|
try utils.respondJson(ctx, .created, user);
|
|
}
|
|
};
|