Skip to content

Commit d927d51

Browse files
committed
initial awesome
1 parent d594a5f commit d927d51

38 files changed

+134
-134
lines changed

.vscode/model.code-snippets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"ResourceCodegen": {
99
"prefix": "genrsc",
1010
"body": [
11-
"// codegen:start {preset: meta, sourcePrefix: src/resources/}"
11+
"// codegen:start {preset: meta, sourcePrefix: src/}"
1212
]
1313
},
1414
"ModelComplete": {

api/src/Accounts.controllers.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { RepoConfig } from "#api/config"
22
import { RepoDefault } from "#api/lib/layers"
3-
import type { UserId } from "#models/User"
4-
import { User } from "#models/User"
53
import { Model } from "@effect-app/infra"
64
import { NotFoundError, NotLoggedInError } from "@effect-app/infra/errors"
5+
import { Q } from "@effect-app/infra/Model"
76
import { generate } from "@effect-app/infra/test"
87
import { Array, Effect, Exit, Layer, Option, pipe, Request, RequestResolver, S } from "effect-app"
98
import { fakerArb } from "effect-app/faker"
109
import { Email } from "effect-app/Schema"
1110
import fc from "fast-check"
12-
import { Q } from "../lib.js"
1311
import { UserProfile } from "../UserProfile.js"
12+
import type { UserId } from "./models.js"
13+
import { User } from "./models.js"
1414

1515
export type UserSeed = "sample" | ""
1616

api/src/resources/resolvers/UserResolver.ts renamed to api/src/Accounts/UserResolver.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { UserId } from "#models/User"
21
import { clientFor } from "#resources/lib"
32
import { Effect, Exit, Request, RequestResolver } from "effect"
43
import { Array, Option, pipe, S } from "effect-app"
54
import { ApiClientFactory, NotFoundError } from "effect-app/client"
65
import { type Schema } from "effect-app/Schema"
7-
import * as UsersRsc from "../Users.js"
8-
import { UserView } from "../views/UserView.js"
6+
import { UserId } from "./models.js"
7+
import { AccountsRsc } from "./resources.js"
8+
import { UserView } from "./UserView.js"
99

1010
interface GetUserViewById extends Request.Request<UserView, NotFoundError<"User">> {
1111
readonly _tag: "GetUserViewById"
@@ -15,7 +15,7 @@ const GetUserViewById = Request.tagged<GetUserViewById>("GetUserViewById")
1515

1616
const getUserViewByIdResolver = RequestResolver
1717
.makeBatched((requests: GetUserViewById[]) =>
18-
clientFor(UsersRsc).pipe(
18+
clientFor(AccountsRsc).pipe(
1919
Effect.flatMap((client) =>
2020
client
2121
.IndexUsers
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { User } from "#models/User"
21
import { S } from "#resources/lib"
2+
import { User } from "./models.js"
33

44
export class UserView extends S.ExtendedClass<UserView, UserView.Encoded>()({
55
...User.pick("id", "role"),
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import { matchFor, Router } from "#api/lib/routing"
2-
import { Q, UserRepo } from "#api/services"
3-
import { UsersRsc } from "#resources"
4-
import type { UserView } from "#resources/views"
5-
import { Array } from "effect"
6-
import { Effect, Order } from "effect-app"
2+
import { Q } from "@effect-app/infra/Model"
3+
import { Array, Effect, Order } from "effect-app"
4+
import { AccountsRsc } from "./resources.js"
5+
import { UserRepo } from "./UserRepo.js"
6+
import type { UserView } from "./UserView.js"
77

8-
export default Router(UsersRsc)({
8+
export default Router(AccountsRsc)({
99
dependencies: [UserRepo.Default],
1010
effect: Effect.gen(function*() {
1111
const userRepo = yield* UserRepo
1212

13-
return matchFor(UsersRsc)({
13+
return matchFor(AccountsRsc)({
14+
GetMe: userRepo.getCurrentUser,
1415
IndexUsers: (req) =>
1516
userRepo
1617
.query(Q.where("id", "in", req.filterByIds))

api/src/Accounts/resources.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { S } from "#resources/lib"
2+
import { NotFoundError } from "effect-app/client"
3+
import { User, UserId } from "./models.js"
4+
import { UserView } from "./UserView.js"
5+
6+
export class GetMe extends S.Req<GetMe>()("GetMe", {}, { success: User, failure: NotFoundError }) {}
7+
8+
export class IndexUsers extends S.Req<IndexUsers>()("IndexUsers", {
9+
filterByIds: S.NonEmptyArray(UserId)
10+
}, {
11+
allowAnonymous: true,
12+
allowRoles: ["user"],
13+
success: S.Struct({
14+
users: S.Array(UserView)
15+
})
16+
}) {}
17+
18+
// codegen:start {preset: meta, sourcePrefix: src/}
19+
export const meta = { moduleName: "Accounts" } as const
20+
// codegen:end
21+
22+
export * as AccountsRsc from "./resources.js"

api/src/services/DBContext/BlogPostRepo.ts renamed to api/src/Blog/BlogPostRepo.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import { UserFromIdResolver } from "#Accounts/models"
2+
import { UserRepo } from "#Accounts/UserRepo"
13
import { RepoDefault } from "#api/lib/layers"
2-
import { BlogPost } from "#models/Blog"
3-
import { UserFromIdResolver } from "#models/User"
44
import { Model } from "@effect-app/infra"
55
import { Effect } from "effect"
66
import { Context } from "effect-app"
77
import { NonEmptyString255, NonEmptyString2k } from "effect-app/Schema"
8-
import { UserRepo } from "./UserRepo.js"
8+
import { BlogPost } from "./models.js"
99

1010
export type BlogPostSeed = "sample" | ""
1111

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { BlogPost } from "#models/Blog"
1+
import { UserViewFromId } from "#api/Accounts/UserResolver"
22
import { S } from "#resources/lib"
3-
import { UserViewFromId } from "../resolvers/UserResolver.js"
3+
import { BlogPost } from "./models.js"
44

55
export class BlogPostView extends S.ExtendedClass<BlogPostView, BlogPostView.Encoded>()({
66
...BlogPost.omit("author"),

0 commit comments

Comments
 (0)