89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const path = require("path");
 | 
						|
const Attendee = require(path.join(__dirname, "/schemas/Attendee"));
 | 
						|
 | 
						|
class UserNotFound extends Error {
 | 
						|
  constructor(message = "User not found.") {
 | 
						|
    super(message);
 | 
						|
    this.name = "UserNotFound";
 | 
						|
    this.statusCode = 404;
 | 
						|
  }
 | 
						|
 | 
						|
  // TODO log missing user
 | 
						|
}
 | 
						|
 | 
						|
const redactAttendeeInfoMapper = attendee => {
 | 
						|
  return {
 | 
						|
    name: attendee.name,
 | 
						|
    raffles: attendee.red + attendee.blue + attendee.yellow + attendee.green,
 | 
						|
    red: attendee.red,
 | 
						|
    blue: attendee.blue,
 | 
						|
    green: attendee.green,
 | 
						|
    yellow: attendee.yellow
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
const allAttendees = isAdmin => {
 | 
						|
  if (!isAdmin) {
 | 
						|
    return Attendee.find().then(attendees => attendees.map(redactAttendeeInfoMapper));
 | 
						|
  } else {
 | 
						|
    return Attendee.find();
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
const addAttendee = attendee => {
 | 
						|
  const { name, red, blue, green, yellow, phoneNumber } = attendee;
 | 
						|
 | 
						|
  let newAttendee = new Attendee({
 | 
						|
    name,
 | 
						|
    red,
 | 
						|
    blue,
 | 
						|
    green,
 | 
						|
    yellow,
 | 
						|
    phoneNumber,
 | 
						|
    winner: false
 | 
						|
  });
 | 
						|
 | 
						|
  return newAttendee.save();
 | 
						|
};
 | 
						|
 | 
						|
const updateAttendeeById = (id, updateModel) => {
 | 
						|
  return Attendee.findOne({ _id: id }).then(attendee => {
 | 
						|
    if (attendee == null) {
 | 
						|
      throw new UserNotFound();
 | 
						|
    }
 | 
						|
 | 
						|
    const updatedAttendee = {
 | 
						|
      name: updateModel.name || attendee.name,
 | 
						|
      green: updateModel.green || attendee.green,
 | 
						|
      red: updateModel.red || attendee.red,
 | 
						|
      blue: updateModel.blue || attendee.blue,
 | 
						|
      yellow: updateModel.yellow || attendee.yellow,
 | 
						|
      phoneNumber: updateModel.phoneNumber || attendee.phoneNumber
 | 
						|
    };
 | 
						|
 | 
						|
    return Attendee.updateOne({ _id: id }, updatedAttendee).then(_ => updatedAttendee);
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
const deleteAttendeeById = id => {
 | 
						|
  return Attendee.findOne({ _id: id }).then(attendee => {
 | 
						|
    if (attendee == null) {
 | 
						|
      throw new UserNotFound();
 | 
						|
    }
 | 
						|
 | 
						|
    return Attendee.deleteOne({ _id: id }).then(_ => attendee);
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
const deleteAttendees = () => {
 | 
						|
  return Attendee.deleteMany();
 | 
						|
};
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  allAttendees,
 | 
						|
  addAttendee,
 | 
						|
  updateAttendeeById,
 | 
						|
  deleteAttendeeById,
 | 
						|
  deleteAttendees
 | 
						|
};
 |