Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions common/errors/app.error.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// src/common/errors/app.error.ts
export class AppError extends Error {
public readonly errorCode: string;
public readonly statusCode: number;
public readonly data?: any;

constructor(params?: {
errorCode: string;
message: string;
statusCode: number;
data?: any;
}) {
super(params?.message);
this.errorCode = params?.errorCode ?? "UNKNOWN";
this.statusCode = params?.statusCode ?? 500;
this.data = params?.data ?? null;
}
}
33 changes: 33 additions & 0 deletions common/errors/error.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// src/common/errors/error.ts
import { AppError } from "./app.error.js";

export class DuplicateUserEmailError extends AppError {
constructor(message: string, data?: unknown) {
super({
errorCode: "U001",
statusCode: 409,
message,
data,
});
}
}

export class MissionAlreadyInProgressError extends AppError {
constructor() {
super({
errorCode: "M001",
statusCode: 400,
message: "이미 도전 중인 미션입니다.",
});
}
}

export class MissionAlreadyCompletedError extends AppError {
constructor() {
super({
errorCode: "M002",
statusCode: 400,
message: "이미 완료한 미션입니다.",
});
}
}
20 changes: 20 additions & 0 deletions common/middlewares/auth.middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// src/common/middlewares/auth.middleware.ts
import { Request, Response, NextFunction } from "express";

export function authorizeUser() {
return async (req: Request, res: Response, next: NextFunction) => {
const { username } = req.cookies;

if (username) {
console.log(`[인증 성공] ${username}님, 환영합니다.`);
next();
} else {
console.log("[인증 실패] 로그인이 필요합니다.");
res
.status(401)
.send(
'<script>alert("로그인이 필요합니다!");location.href="/api/v1/users/login";</script>',
);
}
};
}
11 changes: 11 additions & 0 deletions common/responses/response.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// src/common/responses/response.ts
export interface ApiResponse<T> {
resultType: "SUCCESS";
error: null;
data: T;
}
export const success = <T>(data: T): ApiResponse<T> => ({
resultType: "SUCCESS",
error: null,
data,
});
7 changes: 7 additions & 0 deletions db.config.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions db.config.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions db.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// src/db.config.ts
import { PrismaClient } from "@prisma/client";

export const prisma = new PrismaClient();
18 changes: 18 additions & 0 deletions generated/prisma/browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions generated/prisma/browser.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

54 changes: 54 additions & 0 deletions generated/prisma/browser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@

/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* This file should be your main import to use Prisma-related types and utilities in a browser.
* Use it to get access to models, enums, and input types.
*
* This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only.
* See `client.ts` for the standard, server-side entry point.
*
* 🟢 You can import this file directly.
*/

import * as Prisma from './internal/prismaNamespaceBrowser.js'
export { Prisma }
export * as $Enums from './enums.js'
export * from './enums.js';
/**
* Model User
*
*/
export type User = Prisma.UserModel
/**
* Model FoodCategory
*
*/
export type FoodCategory = Prisma.FoodCategoryModel
/**
* Model UserFavorCategory
*
*/
export type UserFavorCategory = Prisma.UserFavorCategoryModel
/**
* Model Store
*
*/
export type Store = Prisma.StoreModel
/**
* Model UserStoreReview
*
*/
export type UserStoreReview = Prisma.UserStoreReviewModel
/**
* Model Mission
*
*/
export type Mission = Prisma.MissionModel
/**
* Model UserMission
*
*/
export type UserMission = Prisma.UserMissionModel
37 changes: 37 additions & 0 deletions generated/prisma/client.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions generated/prisma/client.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

81 changes: 81 additions & 0 deletions generated/prisma/client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@

/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
* This file should be your main import to use Prisma. Through it you get access to all the models, enums, and input types.
* If you're looking for something you can import in the client-side of your application, please refer to the `browser.ts` file instead.
*
* 🟢 You can import this file directly.
*/

import * as process from 'node:process'
import * as path from 'node:path'
import { fileURLToPath } from 'node:url'
globalThis['__dirname'] = path.dirname(fileURLToPath(import.meta.url))

import * as runtime from "@prisma/client/runtime/library"
import * as $Enums from "./enums.js"
import * as $Class from "./internal/class.js"
import * as Prisma from "./internal/prismaNamespace.js"

export * as $Enums from './enums.js'
export * from "./enums.js"
/**
* ## Prisma Client
*
* Type-safe database client for TypeScript
* @example
* ```
* const prisma = new PrismaClient()
* // Fetch zero or more Users
* const users = await prisma.user.findMany()
* ```
*
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
*/
export const PrismaClient = $Class.getPrismaClientClass(__dirname)
export type PrismaClient<LogOpts extends Prisma.LogLevel = never, OmitOpts extends Prisma.PrismaClientOptions["omit"] = Prisma.PrismaClientOptions["omit"], ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = $Class.PrismaClient<LogOpts, OmitOpts, ExtArgs>
export { Prisma }


// file annotations for bundling tools to include these files
path.join(__dirname, "libquery_engine-darwin.dylib.node")
path.join(process.cwd(), "src/generated/prisma/libquery_engine-darwin.dylib.node")

/**
* Model User
*
*/
export type User = Prisma.UserModel
/**
* Model FoodCategory
*
*/
export type FoodCategory = Prisma.FoodCategoryModel
/**
* Model UserFavorCategory
*
*/
export type UserFavorCategory = Prisma.UserFavorCategoryModel
/**
* Model Store
*
*/
export type Store = Prisma.StoreModel
/**
* Model UserStoreReview
*
*/
export type UserStoreReview = Prisma.UserStoreReviewModel
/**
* Model Mission
*
*/
export type Mission = Prisma.MissionModel
/**
* Model UserMission
*
*/
export type UserMission = Prisma.UserMissionModel
11 changes: 11 additions & 0 deletions generated/prisma/commonInputTypes.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions generated/prisma/commonInputTypes.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading