76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import { Api } from "make-api";
|
|
import { Schema as S } from "@effect/schema";
|
|
import { PieceId, UserId } from "common";
|
|
import { pipe } from "effect";
|
|
import { Piece } from "./db";
|
|
|
|
// --- PIECES ------------------------------------------------------------------
|
|
|
|
export const CreatePiece = pipe(
|
|
Api.make("POST", "piece"),
|
|
Api.requestBodyJson(S.Struct({
|
|
name: S.NonEmptyString,
|
|
composer: S.Union(S.NonEmptyString, S.Null),
|
|
lyricist: S.Union(S.NonEmptyString, S.Null),
|
|
arranger: S.Union(S.NonEmptyString, S.Null),
|
|
})),
|
|
Api.responseBodyJson(201, Piece),
|
|
Api.responseBodyText(400, S.String),
|
|
);
|
|
|
|
export const GetPieces = pipe(
|
|
Api.make("GET", "piece"),
|
|
Api.responseBodyJson(200, S.Array(Piece)),
|
|
);
|
|
|
|
export const UpdatePiece = pipe(
|
|
Api.make("PUT", "piece", ["pieceId", PieceId]),
|
|
Api.requestBodyJson(S.Struct({
|
|
name: S.NonEmptyString,
|
|
composer: S.Union(S.NonEmptyString, S.Null),
|
|
lyricist: S.Union(S.NonEmptyString, S.Null),
|
|
arranger: S.Union(S.NonEmptyString, S.Null),
|
|
})),
|
|
Api.responseBodyJson(200, Piece),
|
|
Api.responseBodyText(400, S.String),
|
|
);
|
|
|
|
export const DeletePiece = pipe(
|
|
Api.make("DELETE", "piece", ["pieceId", PieceId]),
|
|
Api.responseBodyNone(200),
|
|
Api.responseBodyText(400, S.String),
|
|
Api.responseBodyText(404, S.String),
|
|
);
|
|
|
|
// --- AUTHENTICATION ----------------------------------------------------------
|
|
|
|
export const Me = pipe(
|
|
Api.make("GET", "me"),
|
|
Api.responseBodyJson(200, S.Struct({
|
|
userId: UserId,
|
|
username: S.NonEmptyString,
|
|
admin: S.Boolean,
|
|
})),
|
|
Api.responseBodyText(401, S.String),
|
|
);
|
|
|
|
export const Logout = pipe(
|
|
Api.make("POST", "logout"),
|
|
Api.responseBodyNone(204),
|
|
);
|
|
|
|
export const Login = pipe(
|
|
Api.make("POST", "login"),
|
|
Api.requestBodyJson(S.Struct({
|
|
username: S.NonEmptyString,
|
|
password: S.NonEmptyString,
|
|
})),
|
|
Api.responseBodyJson(200, S.Struct({
|
|
userId: UserId,
|
|
username: S.NonEmptyString,
|
|
admin: S.Boolean,
|
|
})),
|
|
Api.responseBodyText(400, S.String),
|
|
Api.responseBodyText(401, S.String),
|
|
);
|