177 lines
4.0 KiB
JavaScript
177 lines
4.0 KiB
JavaScript
import {
|
|
createVenue,
|
|
getVenueById,
|
|
getVenuesByQuery,
|
|
getAllVenues,
|
|
updateVenue,
|
|
aggregateVenue,
|
|
} from "../models/Venue/operations.js";
|
|
import { ObjectId } from "mongodb";
|
|
import { aggregateAssignment } from "../models/Assignment/operations.js";
|
|
import { coordinatesToGeoJson } from "../helpers/geoJson.helper.js";
|
|
import dayjs from "dayjs";
|
|
|
|
export const createVenueController = async (req, res, next) => {
|
|
try {
|
|
const { user } = res.locals;
|
|
|
|
const { location } = req.body;
|
|
|
|
const geoJson = coordinatesToGeoJson({
|
|
latitude: location.lat,
|
|
longitude: location.lng,
|
|
});
|
|
const dbPayload = {
|
|
...req.body,
|
|
location: geoJson,
|
|
createdBy: user.id,
|
|
createdOn: dayjs().toISOString(),
|
|
};
|
|
|
|
const venue = await createVenue(dbPayload);
|
|
|
|
res.status(200).json({ result: venue });
|
|
} catch (error) {
|
|
console.log("createVenueController Error", error);
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
export const deleteVenueController = async (req, res, next) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const venue = await updateVenue(id, { isActive: false });
|
|
|
|
res.status(200).json({ result: venue });
|
|
} catch (error) {
|
|
console.log("deleteVenueController Error", error);
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
export const getVenuesByEntityController = async (req, res, next) => {
|
|
try {
|
|
const { id } = req.params;
|
|
|
|
const venues = await getVenuesByQuery({ entity: id });
|
|
res.status(200).json({ result: venues });
|
|
} catch (error) {
|
|
console.log("getVenuesByEntity Error", error);
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
export const getVenueController = async (req, res, next) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const venue = await getVenueById(id);
|
|
res.status(200).json({ result: venue });
|
|
} catch (error) {
|
|
console.log("getVenueController Error", error);
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
export const getAssignedVenuesController = async (req, res, next) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
// const { user } = res.locals;
|
|
|
|
const assignedVenues = await aggregateAssignment([
|
|
{
|
|
$match: {
|
|
user: ObjectId.createFromHexString(userId),
|
|
isActive: true,
|
|
},
|
|
},
|
|
{
|
|
$lookup: {
|
|
from: "venues",
|
|
localField: "venue",
|
|
foreignField: "_id",
|
|
as: "venue",
|
|
},
|
|
},
|
|
{
|
|
$unwind: {
|
|
path: "$venue",
|
|
preserveNullAndEmptyArrays: true,
|
|
},
|
|
},
|
|
{
|
|
$lookup: {
|
|
from: "partners",
|
|
localField: "venue.entity",
|
|
foreignField: "_id",
|
|
as: "partner",
|
|
},
|
|
},
|
|
{
|
|
$unwind: {
|
|
path: "$partner",
|
|
preserveNullAndEmptyArrays: true,
|
|
},
|
|
},
|
|
]);
|
|
|
|
res.status(200).json({ result: assignedVenues });
|
|
} catch (error) {
|
|
console.log("getAssignedVenues Error", error);
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
export const getUnassignedVenuesController = async (req, res, next) => {
|
|
try {
|
|
const unassignedVenues = await aggregateVenue([
|
|
{
|
|
$match: {
|
|
category: "PARTNER"
|
|
},
|
|
},
|
|
{
|
|
$lookup: {
|
|
from: "assignments",
|
|
localField: "_id",
|
|
foreignField: "venue",
|
|
pipeline: [
|
|
{
|
|
$match: {
|
|
isActive: true,
|
|
},
|
|
},
|
|
],
|
|
as: "activeAssignments",
|
|
},
|
|
},
|
|
{
|
|
$match: {
|
|
$or: [
|
|
{ activeAssignments: { $size: 0 } },
|
|
{ activeAssignments: { $exists: false } },
|
|
],
|
|
},
|
|
},
|
|
{
|
|
$lookup: {
|
|
from: "partners",
|
|
localField: "entity",
|
|
foreignField: "_id",
|
|
as: "partner",
|
|
},
|
|
},
|
|
{
|
|
$unwind: {
|
|
path: "$partner",
|
|
preserveNullAndEmptyArrays: true,
|
|
},
|
|
},
|
|
]);
|
|
|
|
res.status(200).json({ result: unassignedVenues });
|
|
} catch (error) {
|
|
console.log("getUnassignedVenuesController Error", error);
|
|
next(error);
|
|
}
|
|
};
|