diff --git a/crabfit-backend/index.js b/crabfit-backend/index.js index 46e4947..e53d03b 100644 --- a/crabfit-backend/index.js +++ b/crabfit-backend/index.js @@ -37,7 +37,7 @@ app.get('/event/:eventId', getEvent); app.post('/event', createEvent); app.get('/event/:eventId/people', getPeople); app.post('/event/:eventId/people', createPerson); -app.get('/event/:eventId/people/:personName', login); +app.post('/event/:eventId/people/:personName', login); app.patch('/event/:eventId/people/:personName', updatePerson); app.listen(port, () => { diff --git a/crabfit-backend/res/adjectives.json b/crabfit-backend/res/adjectives.json new file mode 100644 index 0000000..3edd6f5 --- /dev/null +++ b/crabfit-backend/res/adjectives.json @@ -0,0 +1,201 @@ +[ + "adorable", + "adventurous", + "aggressive", + "agreeable", + "alert", + "alive", + "amused", + "angry", + "annoyed", + "annoying", + "anxious", + "arrogant", + "ashamed", + "attractive", + "average", + "beautiful", + "better", + "bewildered", + "blue", + "blushing", + "bored", + "brainy", + "brave", + "breakable", + "bright", + "busy", + "calm", + "careful", + "cautious", + "charming", + "cheerful", + "clean", + "clear", + "clever", + "cloudy", + "clumsy", + "colorful", + "comfortable", + "concerned", + "confused", + "cooperative", + "courageous", + "crazy", + "creepy", + "crowded", + "curious", + "cute", + "dangerous", + "dark", + "defiant", + "delightful", + "depressed", + "determined", + "different", + "difficult", + "disgusted", + "distinct", + "disturbed", + "dizzy", + "doubtful", + "drab", + "dull", + "eager", + "easy", + "elated", + "elegant", + "embarrassed", + "enchanting", + "encouraging", + "energetic", + "enthusiastic", + "envious", + "evil", + "excited", + "expensive", + "exuberant", + "fair", + "faithful", + "famous", + "fancy", + "fantastic", + "fierce", + "fine", + "foolish", + "fragile", + "frail", + "frantic", + "friendly", + "frightened", + "funny", + "gentle", + "gifted", + "glamorous", + "gleaming", + "glorious", + "good", + "gorgeous", + "graceful", + "grumpy", + "handsome", + "happy", + "healthy", + "helpful", + "hilarious", + "homely", + "hungry", + "important", + "impossible", + "inexpensive", + "innocent", + "inquisitive", + "itchy", + "jealous", + "jittery", + "jolly", + "joyous", + "kind", + "lazy", + "light", + "lively", + "lonely", + "long", + "lovely", + "lucky", + "magnificent", + "misty", + "modern", + "motionless", + "muddy", + "mushy", + "mysterious", + "naughty", + "nervous", + "nice", + "nutty", + "obedient", + "obnoxious", + "odd", + "old-fashioned", + "open", + "outrageous", + "outstanding", + "panicky", + "perfect", + "plain", + "pleasant", + "poised", + "powerful", + "precious", + "prickly", + "proud", + "puzzled", + "quaint", + "real", + "relieved", + "scary", + "selfish", + "shiny", + "shy", + "silly", + "sleepy", + "smiling", + "smoggy", + "sparkling", + "splendid", + "spotless", + "stormy", + "strange", + "successful", + "super", + "talented", + "tame", + "tasty", + "tender", + "tense", + "terrible", + "thankful", + "thoughtful", + "thoughtless", + "tired", + "tough", + "uninterested", + "unsightly", + "unusual", + "upset", + "uptight", + "vast", + "victorious", + "vivacious", + "wandering", + "weary", + "wicked", + "wide-eyed", + "wild", + "witty", + "worried", + "worrisome", + "zany", + "zealous" +] diff --git a/crabfit-backend/res/crabs.json b/crabfit-backend/res/crabs.json new file mode 100644 index 0000000..a0563b6 --- /dev/null +++ b/crabfit-backend/res/crabs.json @@ -0,0 +1,47 @@ +[ + "American Horseshoe", + "Atlantic Ghost", + "Baja Elbow", + "Big Claw Purple Hermit", + "Coldwater Mole", + "Cuata Swim", + "Deepwater Frog", + "Dwarf Teardrop", + "Elegant Hermit", + "Flat Spider", + "Ghost", + "Globe Purse", + "Green", + "Halloween", + "Harbor Spider", + "Inflated Spider", + "Left Clawed Hermit", + "Lumpy Claw", + "Magnificent Hermit", + "Mexican Spider", + "Mouthless Land", + "Northern Lemon Rock", + "Pacific Arrow", + "Pacific Mole", + "Paco Box", + "Panamic Spider", + "Purple Shore", + "Red Rock", + "Red Swim", + "Red-leg Hermit", + "Robust Swim", + "Rough Swim", + "Sand Swim", + "Sally Lightfoot", + "Shamed-face Box", + "Shamed-face Heart Box", + "Shell", + "Small Arched Box", + "Southern Kelp", + "Spotted Box", + "Striated Mole", + "Striped Shore", + "Tropical Mole", + "Walking Rock", + "Yellow Shore" +] diff --git a/crabfit-backend/routes/createEvent.js b/crabfit-backend/routes/createEvent.js index ea9b143..72de815 100644 --- a/crabfit-backend/routes/createEvent.js +++ b/crabfit-backend/routes/createEvent.js @@ -1,24 +1,33 @@ const dayjs = require('dayjs'); +const adjectives = require('../res/adjectives.json'); +const crabs = require('../res/crabs.json'); + +String.prototype.capitalize = () => this.charAt(0).toUpperCase() + this.slice(1); + const generateId = (name) => { const id = name.trim().toLowerCase().replace(/[^A-Za-z0-9 ]/g, '').replace(/\s+/g, '-'); const number = Math.floor(100000 + Math.random() * 900000); return `${id}-${number}`; }; +const generateName = () => { + return `${adjectives[Math.floor(Math.random() * adjectives.length)].capitalize()} ${crabs[Math.floor(Math.random() * crabs.length)]} Crab`; +}; + module.exports = async (req, res) => { const { event } = req.body; try { - const eventId = generateId(event.name); + const name = event.name.trim() === '' ? generateName() : event.name.trim(); + const eventId = generateId(name); const currentTime = dayjs().unix(); const entity = { key: req.datastore.key(['Event', eventId]), data: { - name: event.name.trim(), + name: name, created: currentTime, - timezone: event.timezone, startTime: event.startTime, endTime: event.endTime, dates: event.dates, @@ -29,9 +38,8 @@ module.exports = async (req, res) => { res.status(201).send({ id: eventId, - name: event.name.trim(), + name: name, created: currentTime, - timezone: event.timezone, startTime: event.startTime, endTime: event.endTime, dates: event.dates, diff --git a/crabfit-backend/routes/createPerson.js b/crabfit-backend/routes/createPerson.js index 6b6d0ad..b118ac9 100644 --- a/crabfit-backend/routes/createPerson.js +++ b/crabfit-backend/routes/createPerson.js @@ -7,9 +7,13 @@ module.exports = async (req, res) => { try { const event = (await req.datastore.get(req.datastore.key(['Event', eventId])))[0]; + const query = req.datastore.createQuery('Person') + .filter('eventId', eventId) + .filter('name', person.name); + let personResult = (await req.datastore.runQuery(query))[0][0]; if (event) { - if (person) { + if (person && personResult === undefined) { const currentTime = dayjs().unix(); // If password diff --git a/crabfit-backend/swagger.yaml b/crabfit-backend/swagger.yaml index 5c5b25a..1794145 100644 --- a/crabfit-backend/swagger.yaml +++ b/crabfit-backend/swagger.yaml @@ -18,8 +18,6 @@ definitions: type: "string" created: type: "integer" - timezone: - type: "string" startTime: type: "string" endTime: @@ -84,8 +82,6 @@ paths: properties: name: type: "string" - timezone: - type: "string" startTime: type: "integer" endTime: @@ -152,7 +148,7 @@ paths: 400: description: "Invalid data" "/event/{eventId}/people/{personName}": - get: + post: summary: "Login as this person" operationId: "getPerson" parameters: diff --git a/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx b/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx index dccc0f3..2e4904f 100644 --- a/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx +++ b/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx @@ -27,6 +27,8 @@ const AvailabilityViewer = ({ dates, times, people = [], + min = 0, + max = 0, ...props }) => { const [tooltip, setTooltip] = useState(null); @@ -52,14 +54,16 @@ const AvailabilityViewer = ({ {times.map((time, i) => { const peopleHere = people.filter(person => person.availability.includes(`${time}-${date}`)).map(person => person.name); + return (