A calendar API made using Express.js and Typescript, with a PostgreSQL + Redis backend, for CrUX inductions round 3. This is not hosted anywhere, and will probably never be updated after the inductions.
Prepend the backend URL before these routes, of course.
POST: register new user
Sample Request Body:{
"username":"username",
"password":"password",
"email":"[email protected]",
"name":"full name"
}
GET: get user account details
(Empty body)Notes:
- User must be authenticated
DELETE: delete user account and all associated calendars/events
(Empty body)Notes:
- User must be authenticated
PATCH: update user account details
Sample Request Body:{
"username":"username",
"password":"password",
"name":"full name"
}
Notes:
- User must be authenticated
- Updating email ID is not supported
- All parameters are optional, only entered values will be updated
POST: log in
Sample Request Body:{
"email":"[email protected]",
"password":"password"
}
DELETE: log out
(Empty body)Notes:
- User must be authenticated
POST: create new calendar
Sample Request Body:{
"name":"calendar name"
}
Notes:
- User must be authenticated
GET: get list of all owned calendars
(Empty body)Notes:
- User must be authenticated
GET: get calendar metadata
(Empty body)Notes:
- User must be authenticated
- User must own the calendar
DELETE: delete calendar
(Empty body)Notes:
- User must be authenticated
- User must own the calendar
PATCH: rename calendar
Sample Request Body:{
"name":"calendar name"
}
Notes:
- User must be authenticated
- User must own the calendar
POST: share calendar with another user
Sample Request Body:{
"email":"[email protected]"
}
Notes:
- User must be authenticated
- User must own the calendar
DELETE: remove a user from calendar share list
Sample Request Body:{
"email":"[email protected]"
}
Notes:
- User must be authenticated
- User must own the calendar
GET: get details of all events in calendar
(Empty body)Notes:
- User must be authenticated
- User must own the calendar
POST: create a new event
Sample Request Body:{
"title": "event title",
"description": "detailed description of the event",
"startTime": "2023-01-01T12:00:00.000Z",
"endTime":"2012-01-01T12:30:00.000Z"
}
Notes:
- User must be authenticated
- User must own the calendar
DELETE: delete an event
Sample Request Body:{
"id": "xxxxxxxxxxxxxxxxxxxxxxxx"
}
Notes:
- User must be authenticated
- User must own the calendar
PATCH: update details of an event
Sample Request Body:{
"id": "xxxxxxxxxxxxxxxxxxxxxxxx",
"title": "event title",
"description": "detailed description of the event",
"startTime": "2023-01-01T12:00:00.000Z",
"endTime":"2023-01-01T12:30:00.000Z"
}
Notes:
- User must be authenticated
- User must own the calendar
- All parameters besides ID are optional
- Event ID cannot be changed
GET: get list of all calendars shared to user
(Empty body)Notes:
- User must be authenticated
GET: get calendar details and events
(Empty body)Notes:
- User must be authenticated
- User must be in the calendar's share list
DELETE: remove self from calendar's share list
(Empty body)Notes:
- User must be authenticated
- User must be in the calendar's share list
(The following two routes are usually accessed via emailed links instead of being used directly. They contain a token in their query strings.)
GET: verify email ID after registration
(Empty body)Notes:
- Server generated token must be present in query string
GET: agree to having a calendar shared with you
(Empty body)Notes:
- User must be authenticated
- Server generated token must be present in query string