Skip to content

Commit

Permalink
feat: started implementing backend (createAdminRequest mutation)
Browse files Browse the repository at this point in the history
  • Loading branch information
GaelFerrand committed Mar 7, 2025
1 parent f0043d8 commit 850cccd
Show file tree
Hide file tree
Showing 23 changed files with 645 additions and 10 deletions.
34 changes: 34 additions & 0 deletions back/src/adminRequest/repository/adminRequest/create.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Prisma, AdminRequest } from "@prisma/client";
import {
LogMetadata,
RepositoryFnDeps
} from "../../../common/repository/types";

export type CreateAdminRequestFn = (
data: Prisma.AdminRequestCreateInput,
logMetadata?: LogMetadata
) => Promise<AdminRequest>;

export const buildCreateAdminRequest = (
deps: RepositoryFnDeps
): CreateAdminRequestFn => {
return async (data, logMetadata?) => {
const { prisma, user } = deps;

const delegation = await prisma.adminRequest.create({
data
});

await prisma.event.create({
data: {
streamId: delegation.id,
actor: user.id,
type: "AdminRequestCreated",
data: { content: data } as Prisma.InputJsonObject,
metadata: { ...logMetadata, authType: user.auth }
}
});

return delegation;
};
};
18 changes: 18 additions & 0 deletions back/src/adminRequest/repository/adminRequest/findFirst.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Prisma, AdminRequest } from "@prisma/client";
import { ReadRepositoryFnDeps } from "../../../common/repository/types";

export type FindFirstAdminRequestFn = (
where: Prisma.AdminRequestWhereInput,
options?: Omit<Prisma.AdminRequestFindFirstArgs, "where">
) => Promise<AdminRequest | null>;

const buildFindFirstAdminRequest: (
deps: ReadRepositoryFnDeps
) => FindFirstAdminRequestFn =
({ prisma }) =>
(where, options?) => {
const input = { where, ...options };
return prisma.adminRequest.findFirst(input);
};

export default buildFindFirstAdminRequest;
22 changes: 22 additions & 0 deletions back/src/adminRequest/repository/adminRequest/findMany.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Prisma } from "@prisma/client";
import { ReadRepositoryFnDeps } from "../../../common/repository/types";

export type FindManyAdminRequestFn = <
Args extends Omit<Prisma.AdminRequestFindManyArgs, "where">
>(
where: Prisma.AdminRequestWhereInput,
options?: Args
) => Promise<Array<Prisma.AdminRequestGetPayload<Args>>>;

export function buildFindManyAdminRequest({
prisma
}: ReadRepositoryFnDeps): FindManyAdminRequestFn {
return async <Args extends Omit<Prisma.AdminRequestFindManyArgs, "where">>(
where: Prisma.AdminRequestWhereInput,
options?: Args
) => {
const input = { where, ...options };
const adminRequests = await prisma.adminRequest.findMany(input);
return adminRequests as Array<Prisma.AdminRequestGetPayload<Args>>;
};
}
36 changes: 36 additions & 0 deletions back/src/adminRequest/repository/adminRequest/update.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { Prisma, AdminRequest } from "@prisma/client";
import {
LogMetadata,
RepositoryFnDeps
} from "../../../common/repository/types";

export type UpdateAdminRequestFn = (
where: Prisma.AdminRequestWhereUniqueInput,
data: Prisma.AdminRequestUpdateInput,
logMetadata?: LogMetadata
) => Promise<AdminRequest>;

export const buildUpdateAdminRequest = (
deps: RepositoryFnDeps
): UpdateAdminRequestFn => {
return async (where, data, logMetadata) => {
const { prisma, user } = deps;

const delegation = await prisma.adminRequest.update({
where,
data
});

await prisma.event.create({
data: {
streamId: delegation.id,
actor: user.id,
type: "AdminRequestUpdated",
data: { content: data } as Prisma.InputJsonObject,
metadata: { ...logMetadata, authType: user.auth }
}
});

return delegation;
};
};
35 changes: 35 additions & 0 deletions back/src/adminRequest/repository/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { prisma } from "@td/prisma";
import { buildCreateAdminRequest } from "./adminRequest/create";
import { transactionWrapper } from "../../common/repository/helper";
import {
RepositoryFnBuilder,
RepositoryTransaction
} from "../../common/repository/types";
import { AdminRequestActions } from "./types";
import buildFindFirstAdminRequest from "./adminRequest/findFirst";
import { buildUpdateAdminRequest } from "./adminRequest/update";
import { buildFindManyAdminRequest } from "./adminRequest/findMany";

export type AdminRequestRepository = AdminRequestActions;

export function getReadonlyAdminRequestRepository() {
return {
findFirst: buildFindFirstAdminRequest({ prisma }),
findMany: buildFindManyAdminRequest({ prisma })
};
}

export function getAdminRequestRepository(
user: Express.User,
transaction?: RepositoryTransaction
): AdminRequestRepository {
function useTransaction<FnResult>(builder: RepositoryFnBuilder<FnResult>) {
return transactionWrapper(builder, { user, transaction });
}

return {
...getReadonlyAdminRequestRepository(),
create: useTransaction(buildCreateAdminRequest),
update: useTransaction(buildUpdateAdminRequest)
};
}
14 changes: 14 additions & 0 deletions back/src/adminRequest/repository/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { CreateAdminRequestFn } from "./adminRequest/create";
import { FindFirstAdminRequestFn } from "./adminRequest/findFirst";
import { FindManyAdminRequestFn } from "./adminRequest/findMany";
import { UpdateAdminRequestFn } from "./adminRequest/update";

export type AdminRequestActions = {
// Read
findFirst: FindFirstAdminRequestFn;
findMany: FindManyAdminRequestFn;

// Write
create: CreateAdminRequestFn;
update: UpdateAdminRequestFn;
};
13 changes: 13 additions & 0 deletions back/src/adminRequest/resolvers/Mutation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import type { MutationResolvers } from "@td/codegen-back";
import createAdminRequest from "./mutations/createAdminRequest";

export type AdminRequestMutationResolvers = Pick<
MutationResolvers,
"createAdminRequest"
>;

const Mutation: AdminRequestMutationResolvers = {
createAdminRequest
};

export default Mutation;
16 changes: 16 additions & 0 deletions back/src/adminRequest/resolvers/Query.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { QueryResolvers } from "@td/codegen-back";
// import AdminRequest from "./queries/AdminRequest";
// import AdminRequests from "./queries/AdminRequests";

export type AdminRequestQueryResolvers = QueryResolvers;
// Pick<
// QueryResolvers,
// "AdminRequest" | "AdminRequests"
// >;

const Query: AdminRequestQueryResolvers = {
// AdminRequest,
// AdminRequests
};

export default Query;
7 changes: 7 additions & 0 deletions back/src/adminRequest/resolvers/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Mutation from "./Mutation";
import Query from "./Query";

export default {
Mutation,
Query
};
Loading

0 comments on commit 850cccd

Please sign in to comment.