defines DI Types for users repo
This commit is contained in:
parent
4750f0055e
commit
e95bd8cb23
|
@ -15,7 +15,7 @@ import { createAdminClient } from "@/app/_utils/supabase/admin";
|
|||
|
||||
// Fetch all users
|
||||
export async function fetchUsers(): Promise<User[]> {
|
||||
// const { data, error } = await supabase.auth.admin.listUsers();
|
||||
// const { data, error } = await supabase.auth.admin.getUsers();
|
||||
|
||||
// if (error) {
|
||||
// console.error("Error fetching users:", error);
|
||||
|
|
|
@ -3,6 +3,28 @@ import { createModule } from '@evyweb/ioctopus';
|
|||
|
||||
import { DI_SYMBOLS } from '@/di/types';
|
||||
import { UsersRepository } from '@/src/infrastructure/repositories/users.repository';
|
||||
import { getUsersUseCase } from '@/src/application/use-cases/users/get-users.use-case';
|
||||
import { getUsersController } from '@/src/interface-adapters/controllers/users/get-users.controller';
|
||||
import { banUserController } from '@/src/interface-adapters/controllers/users/ban-user.controller';
|
||||
import { banUserUseCase } from '@/src/application/use-cases/users/ban-user.use-case';
|
||||
import { unbanUserUseCase } from '@/src/application/use-cases/users/unban-user.use-case';
|
||||
import { getCurrentUserUseCase } from '@/src/application/use-cases/users/get-current-user.use-case';
|
||||
import { getUserByIdUseCase } from '@/src/application/use-cases/users/get-user-by-id.use-case';
|
||||
import { inviteUserUseCase } from '@/src/application/use-cases/users/invite-user.use-case';
|
||||
import { createUserUseCase } from '@/src/application/use-cases/users/create-user.use-case';
|
||||
import { unbanUserController } from '@/src/interface-adapters/controllers/users/unban-user.controller';
|
||||
import { getCurrentUserController } from '@/src/interface-adapters/controllers/users/get-current-user.controller';
|
||||
import { getUserByIdController } from '@/src/interface-adapters/controllers/users/get-user-by-id.controller';
|
||||
import { getUserByEmailController } from '@/src/interface-adapters/controllers/users/get-user-by-email.controller';
|
||||
import { getUserByUsernameController } from '@/src/interface-adapters/controllers/users/get-user-by-username.controller';
|
||||
import { inviteUserController } from '@/src/interface-adapters/controllers/users/invite-user.controller';
|
||||
import { createUserController } from '@/src/interface-adapters/controllers/users/create-user.controller';
|
||||
import { updateUserController } from '@/src/interface-adapters/controllers/users/update-user-controller';
|
||||
import { deleteUserController } from '@/src/interface-adapters/controllers/users/delete-user.controller';
|
||||
import { deleteUserUseCase } from '@/src/application/use-cases/users/delete-user.use-case';
|
||||
import { getUserByUsernameUseCase } from '@/src/application/use-cases/users/get-user-by-username.use-case';
|
||||
import { getUserByEmailUseCase } from '@/src/application/use-cases/users/get-user-by-email.use-case';
|
||||
import { updateUserUseCase } from '@/src/application/use-cases/users/update-user.use-case';
|
||||
|
||||
|
||||
export function createUsersModule() {
|
||||
|
@ -25,5 +47,162 @@ export function createUsersModule() {
|
|||
]);
|
||||
}
|
||||
|
||||
// Use cases
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IBanUserUseCase)
|
||||
.toHigherOrderFunction(banUserUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IUnbanUserUseCase)
|
||||
.toHigherOrderFunction(unbanUserUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetCurrentUserUseCase)
|
||||
.toHigherOrderFunction(getCurrentUserUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUsersUseCase)
|
||||
.toHigherOrderFunction(getUsersUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUserByIdUseCase)
|
||||
.toHigherOrderFunction(getUserByIdUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUserByEmailUseCase)
|
||||
.toHigherOrderFunction(getUserByEmailUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUserByUserNameUseCase)
|
||||
.toHigherOrderFunction(getUserByUsernameUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IInviteUserUseCase)
|
||||
.toHigherOrderFunction(inviteUserUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.ICreateUserUseCase)
|
||||
.toHigherOrderFunction(createUserUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IUpdateUserUseCase)
|
||||
.toHigherOrderFunction(updateUserUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IDeleteUserUseCase)
|
||||
.toHigherOrderFunction(deleteUserUseCase, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUsersRepository
|
||||
]);
|
||||
|
||||
// Controllers
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IBanUserController)
|
||||
.toHigherOrderFunction(banUserController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IBanUserUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IUnbanUserController)
|
||||
.toHigherOrderFunction(unbanUserController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUnbanUserUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetCurrentUserController)
|
||||
.toHigherOrderFunction(getCurrentUserController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IGetCurrentUserUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUsersController)
|
||||
.toHigherOrderFunction(getUsersController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IGetUsersUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUserByIdController)
|
||||
.toHigherOrderFunction(getUserByIdController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IGetUserByIdUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUserByEmailController)
|
||||
.toHigherOrderFunction(getUserByEmailController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IGetUserByEmailUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IGetUserByUserNameController)
|
||||
.toHigherOrderFunction(getUserByUsernameController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IGetUserByUserNameUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IInviteUserController)
|
||||
.toHigherOrderFunction(inviteUserController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IInviteUserUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.ICreateUserController)
|
||||
.toHigherOrderFunction(createUserController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.ICreateUserUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IUpdateUserController)
|
||||
.toHigherOrderFunction(updateUserController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IUpdateUserUseCase
|
||||
]);
|
||||
|
||||
usersModule
|
||||
.bind(DI_SYMBOLS.IDeleteUserController)
|
||||
.toHigherOrderFunction(deleteUserController, [
|
||||
DI_SYMBOLS.IInstrumentationService,
|
||||
DI_SYMBOLS.IDeleteUserUseCase
|
||||
]);
|
||||
|
||||
|
||||
return usersModule;
|
||||
}
|
|
@ -8,10 +8,30 @@ import { ISignUpUseCase } from '@/src/application/use-cases/auth/sign-up.use-cas
|
|||
import { ISignOutUseCase } from '@/src/application/use-cases/auth/sign-out.use-case';
|
||||
import { IUsersRepository } from '@/src/application/repositories/users.repository.interface';
|
||||
import { IVerifyOtpUseCase } from '@/src/application/use-cases/auth/verify-otp.use-case';
|
||||
import { IInviteUserUseCase } from '@/src/application/use-cases/users/invite-user.use-case';
|
||||
import { ISignInController } from '@/src/interface-adapters/controllers/auth/sign-in.controller';
|
||||
import { ISignOutController } from '@/src/interface-adapters/controllers/auth/sign-out.controller';
|
||||
import { IVerifyOtpController } from '@/src/interface-adapters/controllers/auth/verify-otp.controller';
|
||||
import { IBanUserUseCase } from '@/src/application/use-cases/users/ban-user.use-case';
|
||||
import { IUnbanUserUseCase } from '@/src/application/use-cases/users/unban-user.use-case';
|
||||
import { IGetCurrentUserUseCase } from '@/src/application/use-cases/users/get-current-user.use-case';
|
||||
import { IGetUsersUseCase } from '@/src/application/use-cases/users/get-users.use-case';
|
||||
import { IGetUserByIdUseCase } from '@/src/application/use-cases/users/get-user-by-id.use-case';
|
||||
import { IGetUserByEmailUseCase } from '@/src/application/use-cases/users/get-user-by-email.use-case';
|
||||
import { IGetUserByUsernameUseCase } from '@/src/application/use-cases/users/get-user-by-username.use-case';
|
||||
import { IInviteUserUseCase } from '@/src/application/use-cases/users/invite-user.use-case';
|
||||
import { ICreateUserUseCase } from '@/src/application/use-cases/users/create-user.use-case';
|
||||
import { IUpdateUserUseCase } from '@/src/application/use-cases/users/update-user.use-case';
|
||||
import { IDeleteUserUseCase } from '@/src/application/use-cases/users/delete-user.use-case';
|
||||
import { IBanUserController } from '@/src/interface-adapters/controllers/users/ban-user.controller';
|
||||
import { IUnbanUserController } from '@/src/interface-adapters/controllers/users/unban-user.controller';
|
||||
import { IGetCurrentUserController } from '@/src/interface-adapters/controllers/users/get-current-user.controller';
|
||||
import { IGetUserByUsernameController } from '@/src/interface-adapters/controllers/users/get-user-by-username.controller';
|
||||
import { IGetUserByIdController } from '@/src/interface-adapters/controllers/users/get-user-by-id.controller';
|
||||
import { IGetUserByEmailController } from '@/src/interface-adapters/controllers/users/get-user-by-email.controller';
|
||||
import { IInviteUserController } from '@/src/interface-adapters/controllers/users/invite-user.controller';
|
||||
import { IUpdateUserController } from '@/src/interface-adapters/controllers/users/update-user-controller';
|
||||
import { ICreateUserController } from '@/src/interface-adapters/controllers/users/create-user.controller';
|
||||
import { IDeleteUserController } from '@/src/interface-adapters/controllers/users/delete-user.controller';
|
||||
|
||||
export const DI_SYMBOLS = {
|
||||
// Services
|
||||
|
@ -29,10 +49,34 @@ export const DI_SYMBOLS = {
|
|||
IVerifyOtpUseCase: Symbol.for('IVerifyOtpUseCase'),
|
||||
ISignOutUseCase: Symbol.for('ISignOutUseCase'),
|
||||
|
||||
IBanUserUseCase: Symbol.for('IBanUserUseCase'),
|
||||
IUnbanUserUseCase: Symbol.for('IUnbanUserUseCase'),
|
||||
IGetCurrentUserUseCase: Symbol.for('IGetCurrentUserUseCase'),
|
||||
IGetUsersUseCase: Symbol.for('IGetUsersUseCase'),
|
||||
IGetUserByIdUseCase: Symbol.for('IGetUserByIdUseCase'),
|
||||
IGetUserByEmailUseCase: Symbol.for('IGetUserByEmailUseCase'),
|
||||
IGetUserByUserNameUseCase: Symbol.for('IGetUserByUserNameUseCase'),
|
||||
IInviteUserUseCase: Symbol.for('IInviteUserUseCase'),
|
||||
ICreateUserUseCase: Symbol.for('ICreateUserUseCase'),
|
||||
IUpdateUserUseCase: Symbol.for('IUpdateUserUseCase'),
|
||||
IDeleteUserUseCase: Symbol.for('IDeleteUserUseCase'),
|
||||
|
||||
// Controllers
|
||||
ISignInController: Symbol.for('ISignInController'),
|
||||
ISignOutController: Symbol.for('ISignOutController'),
|
||||
IVerifyOtpController: Symbol.for('IVerifyOtpController'),
|
||||
|
||||
IBanUserController: Symbol.for('IBanUserController'),
|
||||
IUnbanUserController: Symbol.for('IUnbanUserController'),
|
||||
IGetCurrentUserController: Symbol.for('IGetCurrentUserController'),
|
||||
IGetUsersController: Symbol.for('IGetUsersController'),
|
||||
IGetUserByIdController: Symbol.for('IGetUserByIdController'),
|
||||
IGetUserByEmailController: Symbol.for('IGetUserByEmailController'),
|
||||
IGetUserByUserNameController: Symbol.for('IGetUserByUserNameController'),
|
||||
IInviteUserController: Symbol.for('IInviteUserController'),
|
||||
ICreateUserController: Symbol.for('ICreateUserController'),
|
||||
IUpdateUserController: Symbol.for('IUpdateUserController'),
|
||||
IDeleteUserController: Symbol.for('IDeleteUserController'),
|
||||
};
|
||||
|
||||
export interface DI_RETURN_TYPES {
|
||||
|
@ -51,8 +95,33 @@ export interface DI_RETURN_TYPES {
|
|||
IVerifyOtpUseCase: IVerifyOtpUseCase;
|
||||
ISignOutUseCase: ISignOutUseCase;
|
||||
|
||||
IBanUserUseCase: IBanUserUseCase;
|
||||
IUnbanUserUseCase: IUnbanUserUseCase;
|
||||
IGetCurrentUserUseCase: IGetCurrentUserUseCase;
|
||||
IGetUsersUseCase: IGetUsersUseCase;
|
||||
IGetUserByIdUseCase: IGetUserByIdUseCase;
|
||||
IGetUserByEmailUseCase: IGetUserByEmailUseCase;
|
||||
IGetUserByUserNameUseCase: IGetUserByUsernameUseCase;
|
||||
IInviteUserUseCase: IInviteUserUseCase;
|
||||
ICreateUserUseCase: ICreateUserUseCase;
|
||||
IUpdateUserUseCase: IUpdateUserUseCase;
|
||||
IDeleteUserUseCase: IDeleteUserUseCase;
|
||||
|
||||
// Controllers
|
||||
ISignInController: ISignInController;
|
||||
IVerifyOtpController: IVerifyOtpController;
|
||||
ISignOutController: ISignOutController;
|
||||
|
||||
IBanUserController: IBanUserController;
|
||||
IUnbanUserController: IUnbanUserController;
|
||||
IGetCurrentUserController: IGetCurrentUserController;
|
||||
IGetUsersController: IGetUserByUsernameController;
|
||||
IGetUserByIdController: IGetUserByIdController;
|
||||
IGetUserByEmailController: IGetUserByEmailController;
|
||||
IGetUserByUserNameController: IGetUserByUsernameController;
|
||||
IInviteUserController: IInviteUserController;
|
||||
ICreateUserController: ICreateUserController;
|
||||
IUpdateUserController: IUpdateUserController;
|
||||
IDeleteUserController: IDeleteUserController;
|
||||
|
||||
}
|
|
@ -4,7 +4,7 @@ import { CreateUser, InviteUser, UpdateUser, User, UserResponse } from "@/src/en
|
|||
import { ITransaction } from "@/src/entities/models/transaction.interface";
|
||||
|
||||
export interface IUsersRepository {
|
||||
listUsers(): Promise<User[]>;
|
||||
getUsers(): Promise<User[]>;
|
||||
getCurrentUser(): Promise<User>;
|
||||
getUserById(id: string): Promise<User | undefined>;
|
||||
getUserByUsername(username: string): Promise<User | undefined>;
|
||||
|
@ -394,7 +394,7 @@ export interface IUsersRepository {
|
|||
// }
|
||||
|
||||
// export async function fetchUsers(): Promise<User[]> {
|
||||
// // const { data, error } = await supabase.auth.admin.listUsers();
|
||||
// // const { data, error } = await supabase.auth.admin.getUsers();
|
||||
|
||||
// // if (error) {
|
||||
// // console.error("Error fetching users:", error);
|
||||
|
|
|
@ -5,7 +5,7 @@ import { User } from "@/src/entities/models/users/users.model"
|
|||
|
||||
export type IDeleteUserUseCase = ReturnType<typeof deleteUserUseCase>
|
||||
|
||||
const deleteUserUseCase = (
|
||||
export const deleteUserUseCase = (
|
||||
instrumentationService: IInstrumentationService,
|
||||
usersRepository: IUsersRepository
|
||||
) => async (id: string): Promise<User> => {
|
||||
|
|
|
@ -5,7 +5,7 @@ import { NotFoundError } from "@/src/entities/errors/common"
|
|||
|
||||
export type IGetUserByEmailUseCase = ReturnType<typeof getUserByEmailUseCase>
|
||||
|
||||
const getUserByEmailUseCase = (
|
||||
export const getUserByEmailUseCase = (
|
||||
instrumentationService: IInstrumentationService,
|
||||
usersRepository: IUsersRepository
|
||||
) => async (email: string): Promise<User> => {
|
||||
|
|
|
@ -5,7 +5,7 @@ import { User } from "@/src/entities/models/users/users.model"
|
|||
|
||||
export type IGetUserByUsernameUseCase = ReturnType<typeof getUserByUsernameUseCase>
|
||||
|
||||
const getUserByUsernameUseCase = (
|
||||
export const getUserByUsernameUseCase = (
|
||||
instrumentationService: IInstrumentationService,
|
||||
usersRepository: IUsersRepository
|
||||
) => async (username: string): Promise<User> => {
|
||||
|
|
|
@ -2,15 +2,15 @@ import { User } from "@/src/entities/models/users/users.model"
|
|||
import { IUsersRepository } from "../../repositories/users.repository.interface"
|
||||
import { IInstrumentationService } from "../../services/instrumentation.service.interface"
|
||||
|
||||
export type IGetListUsersUseCase = ReturnType<typeof getListUsersUseCase>
|
||||
export type IGetUsersUseCase = ReturnType<typeof getUsersUseCase>
|
||||
|
||||
export const getListUsersUseCase = (
|
||||
export const getUsersUseCase = (
|
||||
instrumentationService: IInstrumentationService,
|
||||
usersRepository: IUsersRepository
|
||||
) => async (): Promise<User[]> => {
|
||||
return await instrumentationService.startSpan({ name: "getListUsers Use Case", op: "function" },
|
||||
return await instrumentationService.startSpan({ name: "getgetUsers Use Case", op: "function" },
|
||||
async () => {
|
||||
const users = await usersRepository.listUsers()
|
||||
const users = await usersRepository.getUsers()
|
||||
|
||||
return users
|
||||
}
|
|
@ -5,11 +5,10 @@ import { User } from "@/src/entities/models/users/users.model"
|
|||
|
||||
export type IUnbanUserUseCase = ReturnType<typeof unbanUserUseCase>
|
||||
|
||||
export function unbanUserUseCase(
|
||||
export const unbanUserUseCase = (
|
||||
instrumentationService: IInstrumentationService,
|
||||
usersRepository: IUsersRepository
|
||||
) {
|
||||
return async (id: string): Promise<User> => {
|
||||
) => async (id: string): Promise<User> => {
|
||||
return await instrumentationService.startSpan({ name: "unbanUser Use Case", op: "function" },
|
||||
async () => {
|
||||
const existingUser = await usersRepository.getUserById(id)
|
||||
|
@ -24,4 +23,3 @@ export function unbanUserUseCase(
|
|||
}
|
||||
)
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ import { NotFoundError } from "@/src/entities/errors/common"
|
|||
|
||||
export type IUpdateUserUseCase = ReturnType<typeof updateUserUseCase>
|
||||
|
||||
const updateUserUseCase = (
|
||||
export const updateUserUseCase = (
|
||||
instrumentationService: IInstrumentationService,
|
||||
usersRepository: IUsersRepository
|
||||
) => async (id: string, input: UpdateUser): Promise<User> => {
|
||||
|
|
|
@ -17,7 +17,7 @@ export class UsersRepository implements IUsersRepository {
|
|||
private readonly supabaseServer = createServerClient()
|
||||
) { }
|
||||
|
||||
async listUsers(): Promise<User[]> {
|
||||
async getUsers(): Promise<User[]> {
|
||||
return await this.instrumentationService.startSpan({
|
||||
name: "UsersRepository > getUsers",
|
||||
}, async () => {
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
import { IUsersRepository } from "@/src/application/repositories/users.repository.interface"
|
||||
import { IInstrumentationService } from "@/src/application/services/instrumentation.service.interface"
|
||||
|
||||
export type IGetListUserController = ReturnType<typeof getListUsersController>
|
||||
export type IGetUserController = ReturnType<typeof getUsersController>
|
||||
|
||||
export const getListUsersController =
|
||||
export const getUsersController =
|
||||
(
|
||||
instrumentationService: IInstrumentationService,
|
||||
usersRepository: IUsersRepository
|
||||
) =>
|
||||
async () => {
|
||||
return await instrumentationService.startSpan({ name: "getListUsers Controller" }, async () => {
|
||||
return await usersRepository.listUsers();
|
||||
return await instrumentationService.startSpan({ name: "getgetUsers Controller" }, async () => {
|
||||
return await usersRepository.getUsers();
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue