Skip to content

Commit a73da63

Browse files
rename user api
1 parent 06c992c commit a73da63

File tree

4 files changed

+58
-50
lines changed

4 files changed

+58
-50
lines changed

apps/server/src/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ServerApi } from "@local/api";
1313
import { Effect, Layer } from "effect";
1414
import { createServer } from "node:http";
1515
import { MigratorLive } from "./migrator";
16-
import { RestApiLive } from "./rest";
16+
import { UserGroupLive } from "./user";
1717

1818
const EnvProviderLayer = Layer.unwrapEffect(
1919
PlatformConfigProvider.fromDotEnv(".env").pipe(
@@ -23,7 +23,7 @@ const EnvProviderLayer = Layer.unwrapEffect(
2323
);
2424

2525
const MainApiLive = HttpApiBuilder.api(ServerApi).pipe(
26-
Layer.provide([MigratorLive, RestApiLive]),
26+
Layer.provide([MigratorLive, UserGroupLive]),
2727
Layer.provide(EnvProviderLayer)
2828
);
2929

apps/server/src/rest.ts

Lines changed: 0 additions & 46 deletions
This file was deleted.

apps/server/src/user.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { HttpApiBuilder } from "@effect/platform";
2+
import { SqlClient, SqlResolver } from "@effect/sql";
3+
import { ServerApi, User } from "@local/api";
4+
import { Effect, flow, Function, Layer, Schema } from "effect";
5+
import { DatabaseLive } from "./database";
6+
7+
export const UserGroupLive = HttpApiBuilder.group(
8+
ServerApi,
9+
"user",
10+
(handlers) =>
11+
handlers
12+
.handle("create-user", ({ payload }) =>
13+
Effect.gen(function* () {
14+
const sql = yield* SqlClient.SqlClient;
15+
16+
const InsertPerson = yield* SqlResolver.ordered("InsertPerson", {
17+
Request: User.pipe(Schema.omit("id", "created_at")),
18+
Result: User,
19+
execute: (requests) =>
20+
sql`INSERT INTO "user" ${sql.insert(requests)} RETURNING *`,
21+
});
22+
23+
return yield* InsertPerson.execute({ name: payload.name });
24+
}).pipe(
25+
Effect.tapError(Effect.logError),
26+
Effect.mapError((error) => error.message)
27+
)
28+
)
29+
.handle("get-user", ({ path }) =>
30+
Effect.gen(function* () {
31+
const sql = yield* SqlClient.SqlClient;
32+
33+
const GetById = yield* SqlResolver.findById("GetUserById", {
34+
Id: Schema.Number,
35+
Result: User,
36+
ResultId: (_) => _.id,
37+
execute: (ids) =>
38+
sql`SELECT * FROM "user" WHERE ${sql.in("id", ids)}`,
39+
});
40+
41+
const getById = flow(
42+
GetById.execute,
43+
Effect.withRequestCaching(true)
44+
);
45+
46+
return yield* getById(path.id).pipe(
47+
Effect.flatMap(Function.identity)
48+
);
49+
}).pipe(
50+
Effect.tapError(Effect.logError),
51+
Effect.mapError((error) => error.message)
52+
)
53+
)
54+
).pipe(Layer.provide(DatabaseLive));

packages/api/src/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export class User extends Schema.Class<User>("User")({
1212
created_at: Schema.DateFromSelf,
1313
}) {}
1414

15-
class RestGroup extends HttpApiGroup.make("rest")
15+
class UserGroup extends HttpApiGroup.make("user")
1616
.add(
1717
HttpApiEndpoint.post("create-user")`/user/create`
1818
.setPayload(Schema.Struct({ name: Schema.String }))
@@ -27,4 +27,4 @@ class RestGroup extends HttpApiGroup.make("rest")
2727
.addSuccess(User)
2828
) {}
2929

30-
export class ServerApi extends HttpApi.make("server-api").add(RestGroup) {}
30+
export class ServerApi extends HttpApi.make("server-api").add(UserGroup) {}

0 commit comments

Comments
 (0)