todo
- 프로젝트 파일 구성
- 3계층 API 설계
assets
ㄴindex.html
__tests__
ㄴunit
ㄴintegration
config
controllers
services
repositories
migrations
models
node._modules
app.js
jest.config.js
package-lock.json
package.json
=> ejs사용하기 위해서 assets파일 대신 views파일 생성!
app.js에서
//ejs설정 app.set("view engine", "ejs"); app.set("views", __dirname + "/views"); app.use(express.static(__dirname + "/views")); //정적파일, 이미지파일
터미널에서
npm i ejs --save
router설정
index.js
//routes/index.js const express = require("express"); const router = express.Router();
const laundryRouter = require("./laundry.routes");
router.use("/laundry", laundryRouter);
module.exports = router;
## laundry.routes.js
```javascript
//routes/laundry.routes.js
const express = require("express");
const router = express.Router();
const LaundryController = require("../controllers/laundry.controller");
const laundryController = new LaundryController();
// router.get('/', registerController.getPosts);
router.post("/apply/:userId", laundryController.createApply);
router.get("/:userId", laundryController.getApplyById);
module.exports = router;
//controllers/laundry.controller.js
const LaundryService = require("../services/laundry.service");
class LaundryController {
laundryService = new LaundryService();
getApplyById = async (req, res, next) => {
//아직 로그인기능 없어서 임의로 해둠
const { userId } = req.params;
const laundry = await this.laundryService.findApplyById(userId);
res.status(200).json({ data: laundry });
};
createApply = async (req, res, next) => {
try {
const {
laundryName,
laundryContent,
laundryAddress,
laundryImg,
requests,
} = req.body;
//아직 로그인기능 없어서 임의로 해둠
const userId = 1;
if (!laundryName || !laundryContent || !laundryAddress || !laundryImg)
throw new Error("InvalidParamsError");
const createApplyData = await this.laundryService.createApply(
laundryName,
laundryContent,
laundryAddress,
laundryImg,
requests,
userId
);
res.status(201).json({ data: createApplyData });
} catch (error) {
res.status(400).json({ errorMessage: error.message });
}
};
}
module.exports = LaundryController;
//services/laundry.service.js
const LaundryRepository = require("../repositories/laundry.repository");
const { laundry } = require("../models/index");
class LaundryService {
laundryRepository = new LaundryRepository(laundry);
findApplyById = async (userId) => {
const allLaundryById = await this.laundryRepository.findApplyById(userId);
allLaundryById.sort((a, b) => {
return b.createAt - a.createAt;
});
return allLaundryById.map((laundry) => {
return {
laundryName: laundry.laundryName,
laundryContent: laundry.laundryContent,
laundryAddress: laundry.laundryAddress,
laundryImg: laundry.laundryImg,
requests: laundry.requests,
userId: laundry.userId,
};
});
};
createApply = async (
laundryName,
laundryContent,
laundryAddress,
laundryImg,
requests,
userId
) => {
const createApplyData = await this.laundryRepository.createApply(
laundryName,
laundryContent,
laundryAddress,
laundryImg,
requests,
userId
);
return {
laundryName: createApplyData.laundryName,
laundryContent: createApplyData.laundryContent,
laundryAddress: createApplyData.laundryAddress,
laundryImg: createApplyData.laundryImg,
requests: createApplyData.requests,
};
};
}
module.exports = LaundryService;
// repositorys/laundry.repository.js
class LaundryRepository {
constructor(Model) {
this.Model = Model;
}
findApplyById = async (userId) => {
const applies = await this.Model.findAll({ where: { userId: userId } });
return applies;
};
createApply = async (
laundryName,
laundryContent,
laundryAddress,
laundryImg,
requests,
userId
) => {
const createApplyData = await this.Model.create({
laundryName,
laundryContent,
laundryAddress,
laundryImg,
requests,
userId,
});
return createApplyData;
};
}
module.exports = LaundryRepository;