Skip to content

Commit

Permalink
migrate simple entity service to prisma
Browse files Browse the repository at this point in the history
  • Loading branch information
RohanNankani committed Jul 16, 2024
1 parent 74a5fd0 commit 9e9844b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 40 deletions.
2 changes: 2 additions & 0 deletions backend/typescript/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,7 @@ RUN yarn install

COPY . ./

RUN npx prisma generate --schema=models/prisma/schema.prisma

EXPOSE 8080
ENTRYPOINT ["yarn", "dev"]
70 changes: 30 additions & 40 deletions backend/typescript/services/implementations/simpleEntityService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,10 @@ export default SimpleEntityService;

// } mongodb
// postgresql {
import PgSimpleEntity from "../../models/simpleEntity.model";
import { PrismaClient, simple_entities, enum_entities_enum_field } from '@prisma/client';

const prisma = new PrismaClient();

import {
ISimpleEntityService,
SimpleEntityRequestDTO,
Expand All @@ -140,9 +143,9 @@ const Logger = logger(__filename);
class SimpleEntityService implements ISimpleEntityService {
/* eslint-disable class-methods-use-this */
async getEntity(id: string): Promise<SimpleEntityResponseDTO> {
let entity: PgSimpleEntity | null;
let entity: simple_entities | null;
try {
entity = await PgSimpleEntity.findByPk(id, { raw: true });
entity = await prisma.simple_entities.findUnique({ where: { id: Number(id) } });
if (!entity) {
throw new Error(`Entity id ${id} not found`);
}
Expand All @@ -155,56 +158,52 @@ class SimpleEntityService implements ISimpleEntityService {
id: String(entity.id),
stringField: entity.string_field,
intField: entity.int_field,
enumField: entity.enum_field,
enumField: entity.enum_field as enum_entities_enum_field,
stringArrayField: entity.string_array_field,
boolField: entity.bool_field,
};
}

async getEntities(): Promise<SimpleEntityResponseDTO[]> {
try {
const entities: Array<PgSimpleEntity> = await PgSimpleEntity.findAll({
raw: true,
});
const entities: Array<simple_entities> = await prisma.simple_entities.findMany();
return entities.map((entity) => ({
id: String(entity.id),
stringField: entity.string_field,
intField: entity.int_field,
enumField: entity.enum_field,
enumField: entity.enum_field as enum_entities_enum_field,
stringArrayField: entity.string_array_field,
boolField: entity.bool_field,
}));
} catch (error: unknown) {
Logger.error(
`Failed to get entities. Reason = ${getErrorMessage(error)}`,
);
Logger.error(`Failed to get entities. Reason = ${getErrorMessage(error)}`);
throw error;
}
}

async createEntity(
entity: SimpleEntityRequestDTO,
): Promise<SimpleEntityResponseDTO> {
let newEntity: PgSimpleEntity | null;
let newEntity: simple_entities | null;
try {
newEntity = await PgSimpleEntity.create({
string_field: entity.stringField,
int_field: entity.intField,
enum_field: entity.enumField,
string_array_field: entity.stringArrayField,
bool_field: entity.boolField,
newEntity = await prisma.simple_entities.create({
data: {
string_field: entity.stringField,
int_field: entity.intField,
enum_field: entity.enumField as enum_entities_enum_field,
string_array_field: entity.stringArrayField,
bool_field: entity.boolField,
},
});
} catch (error: unknown) {
Logger.error(
`Failed to create entity. Reason = ${getErrorMessage(error)}`,
);
Logger.error(`Failed to create entity. Reason = ${getErrorMessage(error)}`);
throw error;
}
return {
id: String(newEntity.id),
stringField: newEntity.string_field,
intField: newEntity.int_field,
enumField: newEntity.enum_field,
enumField: newEntity.enum_field as enum_entities_enum_field,
stringArrayField: newEntity.string_array_field,
boolField: newEntity.bool_field,
};
Expand All @@ -214,24 +213,18 @@ class SimpleEntityService implements ISimpleEntityService {
id: string,
entity: SimpleEntityRequestDTO,
): Promise<SimpleEntityResponseDTO | null> {
let resultingEntity: PgSimpleEntity | null;
let updateResult: [number, PgSimpleEntity[]] | null;
let resultingEntity: simple_entities | null;
try {
updateResult = await PgSimpleEntity.update(
{
resultingEntity = await prisma.simple_entities.update(
{ where: { id: Number(id) },
data: {
string_field: entity.stringField,
int_field: entity.intField,
enum_field: entity.enumField,
enum_field: entity.enumField as enum_entities_enum_field,
string_array_field: entity.stringArrayField,
bool_field: entity.boolField,
},
{ where: { id }, returning: true },
);

if (!updateResult[0]) {
throw new Error(`Entity id ${id} not found`);
}
[, [resultingEntity]] = updateResult;
});
} catch (error: unknown) {
Logger.error(
`Failed to update entity. Reason = ${getErrorMessage(error)}`,
Expand All @@ -242,20 +235,17 @@ class SimpleEntityService implements ISimpleEntityService {
id: String(resultingEntity.id),
stringField: resultingEntity.string_field,
intField: resultingEntity.int_field,
enumField: resultingEntity.enum_field,
enumField: resultingEntity.enum_field as enum_entities_enum_field,
stringArrayField: resultingEntity.string_array_field,
boolField: resultingEntity.bool_field,
};
}

async deleteEntity(id: string): Promise<string> {
try {
const deleteResult: number | null = await PgSimpleEntity.destroy({
where: { id },
await prisma.simple_entities.delete({
where: { id: Number(id) }
});
if (!deleteResult) {
throw new Error(`Entity id ${id} not found`);
}
return id;
} catch (error: unknown) {
Logger.error(
Expand Down

0 comments on commit 9e9844b

Please sign in to comment.