added usersHasPlaces mvc to api
This commit is contained in:
parent
e7df50e5b3
commit
027d8c7dee
|
|
@ -0,0 +1,230 @@
|
||||||
|
import {
|
||||||
|
getUserHasPlacesListModel,
|
||||||
|
countUserHasPlacesListModel,
|
||||||
|
insertUserHasPlacesModel,
|
||||||
|
modifyUserHasPlacesModel,
|
||||||
|
softDeleteUserHasPlacesModel
|
||||||
|
} from "../../models/resource_types/usersHasPlacesModel";
|
||||||
|
import { error404 } from "../../utils/errors.js"
|
||||||
|
import { sendResponseNotFound } from "../../utils/responses.js"
|
||||||
|
import { noResults } from "../../validators/result-validators.js"
|
||||||
|
import mysql from "../../adapters/mysql.js"
|
||||||
|
import { errorHandler } from "../../utils/errors.js"
|
||||||
|
|
||||||
|
const getUserHasPlacesListController = (req, res, next, config) => {
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
|
||||||
|
Promise.all([
|
||||||
|
getUserHasPlacesListModel({...req.query, conn}),
|
||||||
|
countUserHasPlacesListModel({...req.query, conn})
|
||||||
|
])
|
||||||
|
.then(([getResults, countResults]) => {
|
||||||
|
next({
|
||||||
|
_data: {usersHasPlaces: getResults},
|
||||||
|
_page: {
|
||||||
|
totalElements: countResults,
|
||||||
|
limit: req.query.limit || 100,
|
||||||
|
page: req.query.page || (countResults && 1) || 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUserHasPlacesByUuidController = (req, res, next, config) => {
|
||||||
|
const uuid_user_has_places = req.params.uuid
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
|
||||||
|
getUserHasPlacesListModel({ uuid_user_has_places, conn })
|
||||||
|
.then((response) => {
|
||||||
|
if (noResults(response)) {
|
||||||
|
const err = error404()
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return sendResponseNotFound(res, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = {
|
||||||
|
_data: {
|
||||||
|
usersHasPlaces: response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next(result)
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUserHasPlacesByUserUuidController = (req, res, next, config) => {
|
||||||
|
const uuid_user = req.params.uuid
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
|
||||||
|
getUserHasPlacesListModel({ uuid_user, conn })
|
||||||
|
.then((response) => {
|
||||||
|
if (noResults(response)) {
|
||||||
|
const err = error404()
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return sendResponseNotFound(res, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = {
|
||||||
|
_data: {
|
||||||
|
usersHasPlaces: response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next(result)
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUserHasPlacesByPlaceUuidController = (req, res, next, config) => {
|
||||||
|
const uuid_place = req.params.uuid
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
|
||||||
|
getUserHasPlacesListModel({ uuid_place, conn })
|
||||||
|
.then((response) => {
|
||||||
|
if (noResults(response)) {
|
||||||
|
const err = error404()
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return sendResponseNotFound(res, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = {
|
||||||
|
_data: {
|
||||||
|
usersHasPlaces: response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next(result)
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const postUserHasPlacesController = (req, res, next, config) => {
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
|
||||||
|
insertUserHasPlacesModel({...req.body, conn})
|
||||||
|
.then((response) => {
|
||||||
|
const result = {
|
||||||
|
_data: {
|
||||||
|
usersHasPlaces: response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next(result)
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const putUserHasPlacesController = (req, res, next, config) => {
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
|
||||||
|
modifyUserHasPlacesModel({...req.body, conn})
|
||||||
|
.then((response) => {
|
||||||
|
const result = {
|
||||||
|
_data: {
|
||||||
|
usersHasPlaces: response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next(result)
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteUserHasPlacesController = (req, res, next, config) => {
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
const uuid_user_has_places = req.params.uuid
|
||||||
|
const deleted_by = req.auth.user || null
|
||||||
|
|
||||||
|
softDeleteUserHasPlacesModel({uuid_user_has_places, deleted_by, conn})
|
||||||
|
.then(() => {
|
||||||
|
next({})
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteUserHasPlacesByUserUuidController = (req, res, next, config) => {
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
const uuid_user = req.params.uuid
|
||||||
|
const deleted_by = req.auth.user || null
|
||||||
|
|
||||||
|
softDeleteUserHasPlacesModel({uuid_user, deleted_by, conn})
|
||||||
|
.then(() => {
|
||||||
|
next({})
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteUserHasPlacesByPlaceUuidController = (req, res, next, config) => {
|
||||||
|
const conn = mysql.start(config)
|
||||||
|
const uuid_place = req.params.uuid
|
||||||
|
const deleted_by = req.auth.user || null
|
||||||
|
|
||||||
|
softDeleteUserHasPlacesModel({uuid_place, deleted_by, conn})
|
||||||
|
.then(() => {
|
||||||
|
next({})
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
const error = errorHandler(err, config.environment)
|
||||||
|
return res.status(error.code).json(error)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
mysql.end(conn)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
getUserHasPlacesListController,
|
||||||
|
getUserHasPlacesByUuidController,
|
||||||
|
getUserHasPlacesByUserUuidController,
|
||||||
|
getUserHasPlacesByPlaceUuidController,
|
||||||
|
postUserHasPlacesController,
|
||||||
|
putUserHasPlacesController,
|
||||||
|
deleteUserHasPlacesController,
|
||||||
|
deleteUserHasPlacesByUserUuidController,
|
||||||
|
deleteUserHasPlacesByPlaceUuidController
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
import { getUserHasPlacesListQuery, countUserHasPlacesListQuery, insertUserHasPlacesQuery, modifyUserHasPlacesQuery, softDeleteUserHasPlacesQuery
|
||||||
|
} from "../../repositories/resource_types/usersHasPlacesRepository";
|
||||||
|
import { randomUUID as uuidv4 } from 'node:crypto'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
import mysql from '../../adapters/mysql.js'
|
||||||
|
import { error404 } from '../../utils/errors.js'
|
||||||
|
|
||||||
|
const getUserHasPlacesListModel = ({conn, ...rest}) => {
|
||||||
|
const now = dayjs.utc().format('YYYY-MM-DD HH:mm:ss')
|
||||||
|
const paramsToSearch = {...rest, now}
|
||||||
|
return mysql
|
||||||
|
.execute(getUserHasPlacesListQuery(paramsToSearch), conn, paramsToSearch)
|
||||||
|
.then(queryResult => queryResult.map(({id, created, deleted, createdBy, deletedBy, ...resultFiltered}) => resultFiltered))
|
||||||
|
}
|
||||||
|
|
||||||
|
const countUserHasPlacesListModel = ({conn, ...rest}) => {
|
||||||
|
const now = dayjs.utc().format('YYYY-MM-DD HH:mm:ss')
|
||||||
|
const paramsToSearch = {...rest, now}
|
||||||
|
return mysql
|
||||||
|
.execute(countUserHasPlacesListQuery(paramsToSearch), conn, paramsToSearch)
|
||||||
|
.then(results => results[0].count)
|
||||||
|
}
|
||||||
|
|
||||||
|
const insertUserHasPlacesModel = ({conn, ...params}) => {
|
||||||
|
const now = dayjs.utc().format('YYYY-MM-DD HH:mm:ss')
|
||||||
|
const uuid = uuidv4()
|
||||||
|
return mysql
|
||||||
|
.execute(insertUserHasPlacesQuery({...params, uuid, now}), conn, {...params, uuid, now})
|
||||||
|
.then(queryResult => queryResult[1].map(({id, created, deleted, createdBy, deletedBy, ...resultFiltered}) => resultFiltered))
|
||||||
|
}
|
||||||
|
|
||||||
|
const modifyUserHasPlacesModel = ({conn, ...params}) => {
|
||||||
|
return mysql
|
||||||
|
.execute(modifyUserHasPlacesQuery(params), conn, params)
|
||||||
|
.then(queryResult => {
|
||||||
|
const deletedItem = queryResult[1].find(item => item.deleted !== null);
|
||||||
|
|
||||||
|
if (deletedItem) {
|
||||||
|
throw error404()
|
||||||
|
}
|
||||||
|
return queryResult[1].map(({id, created, deleted, createdBy, deletedBy, ...resultFiltered}) => resultFiltered)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const softDeleteUserHasPlacesModel = ({uuid, deleted, deletedBy, conn}) => {
|
||||||
|
const deletedData = deleted ? dayjs.utc(deleted).format('YYYY-MM-DD HH:mm:ss') : dayjs.utc().format('YYYY-MM-DD HH:mm:ss')
|
||||||
|
const params = {uuid, deletedBy, deleted: deletedData}
|
||||||
|
return mysql
|
||||||
|
.execute(softDeleteUserHasPlacesQuery(params), conn, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
getUserHasPlacesListModel,
|
||||||
|
countUserHasPlacesListModel,
|
||||||
|
insertUserHasPlacesModel,
|
||||||
|
modifyUserHasPlacesModel,
|
||||||
|
softDeleteUserHasPlacesModel
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
import { pagination } from "../../utils/pagination";
|
||||||
|
|
||||||
|
const _userHasPlacesSelectQuery = (_pagination = '') => ({ count }) => ({ uuid, uuidUser, uuidPlace }) => {
|
||||||
|
const uuidCondition = uuid ? 'AND up.uuid = :uuid ' : '';
|
||||||
|
const uuidUserCondition = uuidUser ? 'AND up.fk_user = (SELECT id FROM mydb.users WHERE uuid = :uuidUser)' : '';
|
||||||
|
const uuidPlaceCondition = uuidPlace ? 'AND up.fk_place = (SELECT id FROM mydb.places WHERE uuid = :uuidPlace)' : '';
|
||||||
|
|
||||||
|
return `
|
||||||
|
SELECT
|
||||||
|
up.uuid,
|
||||||
|
up.fk_user,
|
||||||
|
up.fk_place,
|
||||||
|
up.created,
|
||||||
|
up.createdby,
|
||||||
|
u.username AS user_username,
|
||||||
|
u.uuid AS user_uuid,
|
||||||
|
p.name AS place_name,
|
||||||
|
p.uuid AS place_uuid
|
||||||
|
FROM mydb.users_has_places AS up
|
||||||
|
JOIN mydb.users AS u ON up.fk_user = u.id
|
||||||
|
JOIN mydb.places AS p ON up.fk_place = p.id
|
||||||
|
WHERE up.created <= :now
|
||||||
|
AND (up.deleted > :now OR up.deleted IS NULL)
|
||||||
|
AND u.deleted IS NULL
|
||||||
|
AND up.created <= :now
|
||||||
|
AND (up.deleted > :now OR up.deleted IS NULL)
|
||||||
|
AND true
|
||||||
|
${uuidCondition}
|
||||||
|
${uuidUserCondition}
|
||||||
|
${uuidPlaceCondition}
|
||||||
|
${_pagination}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const getUserHasPlacesListQuery = ({ limit, page, ...rest }) =>
|
||||||
|
_userHasPlacesSelectQuery(pagination({ limit, page }))({ count: false })(rest);
|
||||||
|
|
||||||
|
const countUserHasPlacesListQuery = rest =>
|
||||||
|
_userHasPlacesSelectQuery()({ count: 'COUNT(DISTINCT(up.uuid)) AS count' })(rest);
|
||||||
|
|
||||||
|
const insertUserHasPlacesQuery = ({ uuidUser, uuidPlace, createdBy }) => {
|
||||||
|
const uuidUserCondition = uuidUser ? '(SELECT id FROM mydb.users WHERE uuid = :uuidUser),' : null;
|
||||||
|
const uuidPlaceCondition = uuidPlace ? '(SELECT id FROM mydb.places WHERE uuid = :uuidPlace),' : null;
|
||||||
|
const createdByCondition = createdBy ? 'createdBy = :createdBy' : null;
|
||||||
|
return `
|
||||||
|
INSERT INTO mydb.users_has_places (
|
||||||
|
uuid,
|
||||||
|
fk_user,
|
||||||
|
fk_place,
|
||||||
|
created,
|
||||||
|
createdBy
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
:uuid
|
||||||
|
${uuidUserCondition}
|
||||||
|
${uuidPlaceCondition}
|
||||||
|
:now,
|
||||||
|
${createdByCondition}
|
||||||
|
);
|
||||||
|
SELECT * FROM mydb.users_has_places WHERE uuid = UUID();
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
const modifyUserHasPlacesQuery = () => {
|
||||||
|
const uuidUserCondition = uuidUser ? 'fk_user = (SELECT id FROM mydb.users WHERE uuid = :uuidUser)' : ``;
|
||||||
|
const uuidPlaceCondition = uuidPlace ? 'fk_place = (SELECT id FROM mydb.places WHERE uuid = :uuidPlace)' : ``;
|
||||||
|
return `
|
||||||
|
UPDATE mydb.users_has_places
|
||||||
|
SET
|
||||||
|
${uuidUserCondition}
|
||||||
|
${uuidPlaceCondition}
|
||||||
|
uuid = :uuid
|
||||||
|
WHERE
|
||||||
|
users_has_places.uuid = :uuid
|
||||||
|
AND
|
||||||
|
users_has_places.deleted IS NULL;
|
||||||
|
SELECT * FROM mydb.users_has_places WHERE uuid = :uuid;
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
const softDeleteUserHasPlacesQuery = () => {
|
||||||
|
return `
|
||||||
|
UPDATE
|
||||||
|
mydb.users_has_places
|
||||||
|
SET
|
||||||
|
deleted = :now, deletedBy = :deletedBy
|
||||||
|
WHERE
|
||||||
|
users_has_places.uuid = :uuid
|
||||||
|
AND
|
||||||
|
users_has_places.deleted IS NULL;
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
getUserHasPlacesListQuery,
|
||||||
|
countUserHasPlacesListQuery,
|
||||||
|
insertUserHasPlacesQuery,
|
||||||
|
modifyUserHasPlacesQuery,
|
||||||
|
softDeleteUserHasPlacesQuery
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue