diff --git a/.vscode/model.code-snippets b/.vscode/model.code-snippets index be19411aa..cc144444d 100644 --- a/.vscode/model.code-snippets +++ b/.vscode/model.code-snippets @@ -8,7 +8,7 @@ "ResourceCodegen": { "prefix": "genrsc", "body": [ - "// codegen:start {preset: meta, sourcePrefix: src/resources/}" + "// codegen:start {preset: meta, sourcePrefix: src/}" ] }, "ModelComplete": { diff --git a/api/src/Accounts.controllers.ts b/api/src/Accounts.controllers.ts deleted file mode 100644 index 2baeb470f..000000000 --- a/api/src/Accounts.controllers.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { matchFor, Router } from "#api/lib/routing" -import { UserRepo } from "#api/services" -import { AccountsRsc } from "#resources" -import { Effect } from "effect-app" - -export default Router(AccountsRsc)({ - dependencies: [UserRepo.Default], - effect: Effect.gen(function*() { - const userRepo = yield* UserRepo - - return matchFor(AccountsRsc)({ - GetMe: userRepo.getCurrentUser - }) - }) -}) diff --git a/api/src/services/DBContext/UserRepo.ts b/api/src/Accounts/UserRepo.ts similarity index 96% rename from api/src/services/DBContext/UserRepo.ts rename to api/src/Accounts/UserRepo.ts index 6d0e36804..001d2020b 100644 --- a/api/src/services/DBContext/UserRepo.ts +++ b/api/src/Accounts/UserRepo.ts @@ -1,16 +1,16 @@ import { RepoConfig } from "#api/config" import { RepoDefault } from "#api/lib/layers" -import type { UserId } from "#models/User" -import { User } from "#models/User" import { Model } from "@effect-app/infra" import { NotFoundError, NotLoggedInError } from "@effect-app/infra/errors" +import { Q } from "@effect-app/infra/Model" import { generate } from "@effect-app/infra/test" import { Array, Effect, Exit, Layer, Option, pipe, Request, RequestResolver, S } from "effect-app" import { fakerArb } from "effect-app/faker" import { Email } from "effect-app/Schema" import fc from "fast-check" -import { Q } from "../lib.js" import { UserProfile } from "../UserProfile.js" +import type { UserId } from "./models.js" +import { User } from "./models.js" export type UserSeed = "sample" | "" diff --git a/api/src/Users.controllers.ts b/api/src/Accounts/controllers.ts similarity index 56% rename from api/src/Users.controllers.ts rename to api/src/Accounts/controllers.ts index 7bc562689..3e066b9f5 100644 --- a/api/src/Users.controllers.ts +++ b/api/src/Accounts/controllers.ts @@ -1,16 +1,17 @@ import { matchFor, Router } from "#api/lib/routing" -import { Q, UserRepo } from "#api/services" -import { UsersRsc } from "#resources" -import type { UserView } from "#resources/views" -import { Array } from "effect" -import { Effect, Order } from "effect-app" +import { Q } from "@effect-app/infra/Model" +import { Array, Effect, Order } from "effect-app" +import type { UserView } from "./resources.js" +import { AccountsRsc } from "./resources.js" +import { UserRepo } from "./UserRepo.js" -export default Router(UsersRsc)({ +export default Router(AccountsRsc)({ dependencies: [UserRepo.Default], effect: Effect.gen(function*() { const userRepo = yield* UserRepo - return matchFor(UsersRsc)({ + return matchFor(AccountsRsc)({ + GetMe: userRepo.getCurrentUser, IndexUsers: (req) => userRepo .query(Q.where("id", "in", req.filterByIds)) diff --git a/api/src/models/User.ts b/api/src/Accounts/models.ts similarity index 100% rename from api/src/models/User.ts rename to api/src/Accounts/models.ts diff --git a/api/src/resources/resolvers/UserResolver.ts b/api/src/Accounts/resolvers.ts similarity index 91% rename from api/src/resources/resolvers/UserResolver.ts rename to api/src/Accounts/resolvers.ts index 9d6ec15e8..a9daba4cc 100644 --- a/api/src/resources/resolvers/UserResolver.ts +++ b/api/src/Accounts/resolvers.ts @@ -1,11 +1,10 @@ -import { UserId } from "#models/User" import { clientFor } from "#resources/lib" import { Effect, Exit, Request, RequestResolver } from "effect" import { Array, Option, pipe, S } from "effect-app" import { ApiClientFactory, NotFoundError } from "effect-app/client" import { type Schema } from "effect-app/Schema" -import * as UsersRsc from "../Users.js" -import { UserView } from "../views/UserView.js" +import { UserId } from "./models.js" +import { AccountsRsc, UserView } from "./resources.js" interface GetUserViewById extends Request.Request> { readonly _tag: "GetUserViewById" @@ -15,7 +14,7 @@ const GetUserViewById = Request.tagged("GetUserViewById") const getUserViewByIdResolver = RequestResolver .makeBatched((requests: GetUserViewById[]) => - clientFor(UsersRsc).pipe( + clientFor(AccountsRsc).pipe( Effect.flatMap((client) => client .IndexUsers diff --git a/api/src/Accounts/resources.ts b/api/src/Accounts/resources.ts new file mode 100644 index 000000000..3405b6556 --- /dev/null +++ b/api/src/Accounts/resources.ts @@ -0,0 +1,37 @@ +import { S } from "#resources/lib" +import { NotFoundError } from "effect-app/client" +import { User, UserId } from "./models.js" + +export class UserView extends S.ExtendedClass()({ + ...User.pick("id", "role"), + displayName: S.NonEmptyString2k +}) {} + +export class GetMe extends S.Req()("GetMe", {}, { success: User, failure: NotFoundError }) {} + +export class IndexUsers extends S.Req()("IndexUsers", { + filterByIds: S.NonEmptyArray(UserId) +}, { + allowAnonymous: true, + allowRoles: ["user"], + success: S.Struct({ + users: S.Array(UserView) + }) +}) {} + +// codegen:start {preset: meta, sourcePrefix: src/} +export const meta = { moduleName: "Accounts" } as const +// codegen:end + +// codegen:start {preset: model} +// +/* eslint-disable */ +export namespace UserView { + export interface Encoded extends S.Struct.Encoded {} +} +/* eslint-enable */ +// +// codegen:end +// + +export * as AccountsRsc from "./resources.js" diff --git a/api/src/services/DBContext/BlogPostRepo.ts b/api/src/Blog/BlogPostRepo.ts similarity index 90% rename from api/src/services/DBContext/BlogPostRepo.ts rename to api/src/Blog/BlogPostRepo.ts index 36d97a1f5..737887656 100644 --- a/api/src/services/DBContext/BlogPostRepo.ts +++ b/api/src/Blog/BlogPostRepo.ts @@ -1,11 +1,11 @@ +import { UserFromIdResolver } from "#Accounts/models" +import { UserRepo } from "#Accounts/UserRepo" import { RepoDefault } from "#api/lib/layers" -import { BlogPost } from "#models/Blog" -import { UserFromIdResolver } from "#models/User" import { Model } from "@effect-app/infra" import { Effect } from "effect" import { Context } from "effect-app" import { NonEmptyString255, NonEmptyString2k } from "effect-app/Schema" -import { UserRepo } from "./UserRepo.js" +import { BlogPost } from "./models.js" export type BlogPostSeed = "sample" | "" diff --git a/api/src/Blog.controllers.ts b/api/src/Blog/controllers.ts similarity index 88% rename from api/src/Blog.controllers.ts rename to api/src/Blog/controllers.ts index 7218316fc..22e1975b2 100644 --- a/api/src/Blog.controllers.ts +++ b/api/src/Blog/controllers.ts @@ -1,12 +1,15 @@ +import { UserRepo } from "#api/Accounts/UserRepo" +import { Events } from "#api/Events" import { matchFor, Router } from "#api/lib/routing" -import { BlogPostRepo, Events, Operations, UserRepo } from "#api/services" -import { BlogPost } from "#models/Blog" -import { BlogRsc } from "#resources" import { BogusEvent } from "#resources/Events" +import { Operations } from "@effect-app/infra/Operations" import { Duration, Effect, Schedule } from "effect" import { Option } from "effect-app" import { NonEmptyString2k, NonNegativeInt } from "effect-app/Schema" -import { OperationsDefault } from "./lib/layers.js" +import { OperationsDefault } from "../lib/layers.js" +import { BlogPostRepo } from "./BlogPostRepo.js" +import { BlogPost } from "./models.js" +import { BlogRsc } from "./resources.js" export default Router(BlogRsc)({ dependencies: [ diff --git a/api/src/models/Blog.ts b/api/src/Blog/models.ts similarity index 94% rename from api/src/models/Blog.ts rename to api/src/Blog/models.ts index ffb31e216..60f854358 100644 --- a/api/src/models/Blog.ts +++ b/api/src/Blog/models.ts @@ -1,5 +1,5 @@ +import { UserFromId } from "#Accounts/models" import { S } from "effect-app" -import { UserFromId } from "./User.js" export const BlogPostId = S.prefixedStringId()("post", "BlogPostId") export interface BlogPostIdBrand { diff --git a/api/src/resources/Blog.ts b/api/src/Blog/resources.ts similarity index 60% rename from api/src/resources/Blog.ts rename to api/src/Blog/resources.ts index 843cba4a4..38535d2a9 100644 --- a/api/src/resources/Blog.ts +++ b/api/src/Blog/resources.ts @@ -1,8 +1,13 @@ -import { BlogPost, BlogPostId } from "#models/Blog" +import { UserViewFromId } from "#api/Accounts/resolvers" +import { S } from "#resources/lib" import { InvalidStateError, NotFoundError, OptimisticConcurrencyException } from "effect-app/client" import { OperationId } from "effect-app/Operations" -import { S } from "./lib.js" -import { BlogPostView } from "./views.js" +import { BlogPost, BlogPostId } from "./models.js" + +export class BlogPostView extends S.ExtendedClass()({ + ...BlogPost.omit("author"), + author: S.propertySignature(UserViewFromId).pipe(S.fromKey("authorId")) +}) {} export class CreatePost extends S.Req()("CreatePost", BlogPost.pick("title", "body"), { allowRoles: ["user"], @@ -26,6 +31,18 @@ export class PublishPost extends S.Req()("PublishPost", { id: BlogPostId }, { allowRoles: ["user"], success: OperationId, failure: S.Union(NotFoundError) }) {} -// codegen:start {preset: meta, sourcePrefix: src/resources/} +// codegen:start {preset: meta, sourcePrefix: src/} export const meta = { moduleName: "Blog" } as const // codegen:end + +// codegen:start {preset: model} +// +/* eslint-disable */ +export namespace BlogPostView { + export interface Encoded extends S.Struct.Encoded {} +} +/* eslint-enable */ +// +// codegen:end + +export * as BlogRsc from "./resources.js" diff --git a/api/src/services/Events.ts b/api/src/Events.ts similarity index 92% rename from api/src/services/Events.ts rename to api/src/Events.ts index b647887f5..8703d4af2 100644 --- a/api/src/services/Events.ts +++ b/api/src/Events.ts @@ -1,7 +1,7 @@ -import type { ClientEvents } from "#resources" import { storeId } from "@effect-app/infra/Store/Memory" import { Effect, FiberRef, PubSub, Stream } from "effect-app" import type { NonEmptyReadonlyArray } from "effect/Array" +import type { ClientEvents } from "./resources/Events.js" export class Events extends Effect.Service()("Events", { accessors: true, diff --git a/api/src/HelloWorld.controllers.ts b/api/src/HelloWorld/controllers.ts similarity index 86% rename from api/src/HelloWorld.controllers.ts rename to api/src/HelloWorld/controllers.ts index 132b9b96a..f7f01ec28 100644 --- a/api/src/HelloWorld.controllers.ts +++ b/api/src/HelloWorld/controllers.ts @@ -1,11 +1,10 @@ +import { User } from "#api/Accounts/models" +import { UserRepo } from "#api/Accounts/UserRepo" import { matchFor, Router } from "#api/lib/routing" -import { UserRepo } from "#api/services" -import { User } from "#models/User" -import { HelloWorldRsc } from "#resources" -import { GetHelloWorld } from "#resources/HelloWorld" import { getRequestContext } from "@effect-app/infra/api/setupRequest" import { generate } from "@effect-app/infra/test" import { Effect, S } from "effect-app" +import { GetHelloWorld, HelloWorldRsc } from "./resources.js" export default Router(HelloWorldRsc)({ dependencies: [UserRepo.Default], diff --git a/api/src/resources/HelloWorld.ts b/api/src/HelloWorld/resources.ts similarity index 72% rename from api/src/resources/HelloWorld.ts rename to api/src/HelloWorld/resources.ts index 3f5cb5211..4b0cbdc54 100644 --- a/api/src/resources/HelloWorld.ts +++ b/api/src/HelloWorld/resources.ts @@ -1,6 +1,6 @@ +import { UserView } from "#api/Accounts/resources" +import { S } from "#resources/lib" import { RequestContext } from "@effect-app/infra/RequestContext" -import { S } from "./lib.js" -import { UserView } from "./views.js" class Response extends S.Class()({ now: S.Date.withDefault, @@ -14,6 +14,7 @@ export class GetHelloWorld extends S.Req()("GetHelloWorld", { echo: S.String }, { allowAnonymous: true, allowRoles: ["user"], success: Response }) {} -// codegen:start {preset: meta, sourcePrefix: src/resources/} +// codegen:start {preset: meta, sourcePrefix: src/} export const meta = { moduleName: "HelloWorld" } as const // codegen:end +export * as HelloWorldRsc from "./resources.js" diff --git a/api/src/Operations.controllers.ts b/api/src/Operations/controllers.ts similarity index 72% rename from api/src/Operations.controllers.ts rename to api/src/Operations/controllers.ts index 4a22c15f9..0419d2dd3 100644 --- a/api/src/Operations.controllers.ts +++ b/api/src/Operations/controllers.ts @@ -1,8 +1,8 @@ +import { OperationsDefault } from "#api/lib/layers" import { matchFor, Router } from "#api/lib/routing" -import { Operations } from "#api/services" -import { OperationsRsc } from "#resources" +import { Operations } from "@effect-app/infra/Operations" import { Effect } from "effect-app" -import { OperationsDefault } from "./lib/layers.js" +import { OperationsRsc } from "./resources.js" export default Router(OperationsRsc)({ dependencies: [OperationsDefault], diff --git a/api/src/resources/Operations.ts b/api/src/Operations/resources.ts similarity index 95% rename from api/src/resources/Operations.ts rename to api/src/Operations/resources.ts index 0b38c13d5..9f469c6e9 100644 --- a/api/src/resources/Operations.ts +++ b/api/src/Operations/resources.ts @@ -1,14 +1,13 @@ +import { clientFor, S } from "#api/resources/lib" import { Duration, Effect } from "effect-app" import { NotFoundError } from "effect-app/client" import { Operation, OperationFailure, OperationId } from "effect-app/Operations" -import { clientFor } from "./lib.js" -import * as S from "./lib/schema.js" export class FindOperation extends S.Req()("FindOperation", { id: OperationId }, { allowAnonymous: true, allowRoles: ["user"], success: S.NullOr(Operation) }) {} -// codegen:start {preset: meta, sourcePrefix: src/resources/} +// codegen:start {preset: meta, sourcePrefix: src/} export const meta = { moduleName: "Operations" } as const // codegen:end @@ -96,3 +95,5 @@ export const OperationsClient = Effect.gen(function*() { waitForOperation_ }) }) + +export * as OperationsRsc from "./resources.js" diff --git a/api/src/services/UserProfile.ts b/api/src/UserProfile.ts similarity index 95% rename from api/src/services/UserProfile.ts rename to api/src/UserProfile.ts index 18ae6a117..176b9e2bb 100644 --- a/api/src/services/UserProfile.ts +++ b/api/src/UserProfile.ts @@ -1,7 +1,7 @@ -import { Role } from "#models/User" import { parseJwt } from "@effect-app/infra/api/routing/schema/jwt" import { Context, S } from "effect-app" import { UserProfileId } from "effect-app/ids" +import { Role } from "./Accounts/models.js" export class UserProfile extends Context.assignTag()( S.Class()({ diff --git a/api/src/controllers.ts b/api/src/controllers.ts index 0d5106915..0ce550385 100644 --- a/api/src/controllers.ts +++ b/api/src/controllers.ts @@ -1,9 +1,8 @@ -// codegen:start {preset: barrel, include: ./*.controllers.ts, import: default} -import accountsControllers from "./Accounts.controllers.js" -import blogControllers from "./Blog.controllers.js" -import helloWorldControllers from "./HelloWorld.controllers.js" -import operationsControllers from "./Operations.controllers.js" -import usersControllers from "./Users.controllers.js" +// codegen:start {preset: barrel, include: ./*/controllers.ts, import: default} +import accountsControllers from "./Accounts/controllers.js" +import blogControllers from "./Blog/controllers.js" +import helloWorldControllers from "./HelloWorld/controllers.js" +import operationsControllers from "./Operations/controllers.js" -export { accountsControllers, blogControllers, helloWorldControllers, operationsControllers, usersControllers } +export { accountsControllers, blogControllers, helloWorldControllers, operationsControllers } // codegen:end diff --git a/api/src/lib/middleware/events.ts b/api/src/lib/middleware/events.ts index 2b4544991..ae5b5c86d 100644 --- a/api/src/lib/middleware/events.ts +++ b/api/src/lib/middleware/events.ts @@ -1,5 +1,5 @@ -import { Events } from "#api/services" -import { ClientEvents } from "#resources" +import { Events } from "#api/Events" +import { ClientEvents } from "#api/resources/Events" import { makeSSE } from "@effect-app/infra/api/middlewares" import { Effect } from "effect-app" diff --git a/api/src/lib/routing.ts b/api/src/lib/routing.ts index 13ecb4a8f..f0a1c7ca2 100644 --- a/api/src/lib/routing.ts +++ b/api/src/lib/routing.ts @@ -13,11 +13,7 @@ import { Context, Effect, Exit, Layer, Option } from "effect-app" import type { GetEffectContext, RPCContextMap } from "effect-app/client" import type { HttpHeaders, HttpServerRequest } from "effect-app/http" import type * as EffectRequest from "effect/Request" -import { - makeUserProfileFromAuthorizationHeader, - makeUserProfileFromUserHeader, - UserProfile -} from "../services/UserProfile.js" +import { makeUserProfileFromAuthorizationHeader, makeUserProfileFromUserHeader, UserProfile } from "../UserProfile.js" import { basicRuntime } from "./basicRuntime.js" export interface CTX { diff --git a/api/src/resources.ts b/api/src/resources.ts deleted file mode 100644 index 4faf9961a..000000000 --- a/api/src/resources.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type {} from "@effect/platform/HttpClient" - -export { ClientEvents } from "./resources/Events.js" - -// codegen:start {preset: barrel, include: ./resources/*.ts, exclude: [./resources/index.ts, ./resources/lib.ts, ./resources/integrationEvents.ts, ./resources/Messages.ts, ./resources/views.ts, ./resources/Events.ts], export: { as: 'PascalCase', postfix: 'Rsc' }} -export * as AccountsRsc from "./resources/Accounts.js" -export * as BlogRsc from "./resources/Blog.js" -export * as HelloWorldRsc from "./resources/HelloWorld.js" -export * as OperationsRsc from "./resources/Operations.js" -export * as UsersRsc from "./resources/Users.js" -// codegen:end diff --git a/api/src/resources/Accounts.ts b/api/src/resources/Accounts.ts deleted file mode 100644 index 80068cafb..000000000 --- a/api/src/resources/Accounts.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { User } from "#models/User" -import { NotFoundError } from "effect-app/client" -import { S } from "./lib.js" - -export class GetMe extends S.Req()("GetMe", {}, { success: User, failure: NotFoundError }) {} - -// codegen:start {preset: meta, sourcePrefix: src/resources/} -export const meta = { moduleName: "Accounts" } as const -// codegen:end diff --git a/api/src/resources/Users.ts b/api/src/resources/Users.ts deleted file mode 100644 index c73252369..000000000 --- a/api/src/resources/Users.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UserId } from "#models/User" -import { S } from "./lib.js" -import { UserView } from "./views/UserView.js" - -export class IndexUsers extends S.Req()("IndexUsers", { - filterByIds: S.NonEmptyArray(UserId) -}, { - allowAnonymous: true, - allowRoles: ["user"], - success: S.Struct({ - users: S.Array(UserView) - }) -}) {} - -// codegen:start {preset: meta, sourcePrefix: src/resources/} -export const meta = { moduleName: "Users" } as const -// codegen:end diff --git a/api/src/resources/lib/req.ts b/api/src/resources/lib/req.ts index 5e2e2ae4a..bbd41f144 100644 --- a/api/src/resources/lib/req.ts +++ b/api/src/resources/lib/req.ts @@ -1,4 +1,4 @@ -import type { Role } from "#models/User" +import type { Role } from "#api/Accounts/models" import { NotLoggedInError, UnauthorizedError } from "@effect-app/infra/errors" import { Duration, Layer, Request as EffectRequest } from "effect-app" import type { RPCContextMap } from "effect-app/client" diff --git a/api/src/resources/views.ts b/api/src/resources/views.ts deleted file mode 100644 index b09859be2..000000000 --- a/api/src/resources/views.ts +++ /dev/null @@ -1,4 +0,0 @@ -// codegen:start {preset: barrel, include: ./views/*.ts} -export * from "./views/PostView.js" -export * from "./views/UserView.js" -// codegen:end diff --git a/api/src/resources/views/PostView.ts b/api/src/resources/views/PostView.ts deleted file mode 100644 index 7aa56a9c9..000000000 --- a/api/src/resources/views/PostView.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { BlogPost } from "#models/Blog" -import { S } from "#resources/lib" -import { UserViewFromId } from "../resolvers/UserResolver.js" - -export class BlogPostView extends S.ExtendedClass()({ - ...BlogPost.omit("author"), - author: S.propertySignature(UserViewFromId).pipe(S.fromKey("authorId")) -}) {} - -// codegen:start {preset: model} -// -/* eslint-disable */ -export namespace BlogPostView { - export interface Encoded extends S.Struct.Encoded {} -} -/* eslint-enable */ -// -// codegen:end diff --git a/api/src/resources/views/UserView.ts b/api/src/resources/views/UserView.ts deleted file mode 100644 index 928ac6e1b..000000000 --- a/api/src/resources/views/UserView.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { User } from "#models/User" -import { S } from "#resources/lib" - -export class UserView extends S.ExtendedClass()({ - ...User.pick("id", "role"), - displayName: S.NonEmptyString2k -}) {} - -// codegen:start {preset: model} -// -/* eslint-disable */ -export namespace UserView { - export interface Encoded extends S.Struct.Encoded {} -} -/* eslint-enable */ -// -// codegen:end -// diff --git a/api/src/router.ts b/api/src/router.ts index 9aedfeca7..717f6a4ed 100644 --- a/api/src/router.ts +++ b/api/src/router.ts @@ -3,7 +3,7 @@ import * as MW from "#api/lib/middleware" import { Console, Effect, Layer } from "effect-app" import { HttpMiddleware, HttpRouter, HttpServer } from "effect-app/http" import { BaseConfig, MergedConfig } from "./config.js" -import { Events } from "./services.js" +import { Events } from "./Events.js" class RootAppRouter extends HttpRouter.Tag("RootAppRouter")() {} const AllRoutes = RootAppRouter diff --git a/api/src/services.ts b/api/src/services.ts deleted file mode 100644 index eb74b1bc2..000000000 --- a/api/src/services.ts +++ /dev/null @@ -1,6 +0,0 @@ -// codegen:start {preset: barrel, include: services/*.ts } -export * from "./services/DBContext.js" -export * from "./services/Events.js" -export * from "./services/lib.js" -export * from "./services/UserProfile.js" -// codegen:end diff --git a/api/src/services/DBContext.ts b/api/src/services/DBContext.ts deleted file mode 100644 index f3dec88d7..000000000 --- a/api/src/services/DBContext.ts +++ /dev/null @@ -1,4 +0,0 @@ -// codegen:start {preset: barrel, include: ./DBContext/* } -export * from "./DBContext/BlogPostRepo.js" -export * from "./DBContext/UserRepo.js" -// codegen:end diff --git a/api/src/services/lib.ts b/api/src/services/lib.ts deleted file mode 100644 index 651a62991..000000000 --- a/api/src/services/lib.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "@effect-app/infra/adapters/memQueue" -export * from "@effect-app/infra/adapters/ServiceBus" -export * from "@effect-app/infra/Emailer" -export * from "@effect-app/infra/Operations" -export * from "@effect-app/infra/Store/index" - -export { Q } from "@effect-app/infra/Model" diff --git a/api/test/some.test.ts b/api/test/some.test.ts index 340f27ce2..e681d4220 100644 --- a/api/test/some.test.ts +++ b/api/test/some.test.ts @@ -1,4 +1,4 @@ -import { HelloWorldRsc } from "#resources" +import { HelloWorldRsc } from "#HelloWorld/resources" it("works", () => { console.log(HelloWorldRsc) diff --git a/api/tsconfig.json b/api/tsconfig.json index 534c4c0a4..a7e783274 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -1,6 +1,19 @@ { "compilerOptions": { "paths": { + // TODO: auto gen + "#Blog/*": [ + "./src/Blog/*.js" + ], + "#Operations/*": [ + "./src/Operations/*.js" + ], + "#Accounts/*": [ + "./src/Accounts/*.js" + ], + "#HelloWorld/*": [ + "./src/HelloWorld/*.js" + ], "#core/*": [ "./src/core/*.js" ], diff --git a/api/tsconfig.src.json b/api/tsconfig.src.json index 8b9e290cd..7af8e8cbf 100644 --- a/api/tsconfig.src.json +++ b/api/tsconfig.src.json @@ -14,6 +14,19 @@ "#core/*": [ "./src/core/*.js" ], + // TODO: auto gen + "#Blog/*": [ + "./src/Blog/*.js" + ], + "#Operations/*": [ + "./src/Operations/*.js" + ], + "#Accounts/*": [ + "./src/Accounts/*.js" + ], + "#HelloWorld/*": [ + "./src/HelloWorld/*.js" + ], "#resources": [ "./src/resources.js" ], diff --git a/frontend/composables/bus.ts b/frontend/composables/bus.ts index c8a481b28..a592d0719 100644 --- a/frontend/composables/bus.ts +++ b/frontend/composables/bus.ts @@ -1,5 +1,4 @@ -import type { ClientEvents } from "#resources" - +import type { ClientEvents } from "#resources/Events" import mitt from "mitt" type Events = { diff --git a/frontend/composables/client.ts b/frontend/composables/client.ts index 1750ca11a..684864c8c 100644 --- a/frontend/composables/client.ts +++ b/frontend/composables/client.ts @@ -5,7 +5,7 @@ import { runtime, type RT } from "~/plugins/runtime" import type { Effect } from "effect-app" import { clientFor as clientFor_ } from "#resources/lib" import type { Requests } from "effect-app/client" -import { OperationsClient } from "#resources/Operations" +import { OperationsClient } from "#Operations/resources" export { useToast } from "vue-toastification" diff --git a/frontend/composables/currentUser.ts b/frontend/composables/currentUser.ts index 651474d4e..662428dae 100644 --- a/frontend/composables/currentUser.ts +++ b/frontend/composables/currentUser.ts @@ -1,6 +1,6 @@ // Naive login, good enough for the start -import type { UserId } from "#models/User" +import type { UserId } from "#Accounts/models" export function getUserId() { return useCookie("user-id") diff --git a/frontend/composables/eventsource.ts b/frontend/composables/eventsource.ts index 82860a4aa..027517ff8 100644 --- a/frontend/composables/eventsource.ts +++ b/frontend/composables/eventsource.ts @@ -1,8 +1,8 @@ -import { ClientEvents } from "#resources" import ReconnectingEventSource from "reconnecting-eventsource" import { bus } from "./bus" import { onMountedWithCleanup } from "./onMountedWithCleanup" import { S } from "effect-app" +import { ClientEvents } from "#resources/Events" const parseEvent = S.decodeUnknownSync(ClientEvents) diff --git a/frontend/layouts/default.vue b/frontend/layouts/default.vue index d31c7fbf7..ceab2e63c 100644 --- a/frontend/layouts/default.vue +++ b/frontend/layouts/default.vue @@ -1,7 +1,7 @@