0a48327e93e0de659d79950396f230beb10ad27a
EMI Backend service
This is the code for the backend of the EMI website.
Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Prerequisites
What things you need to install the software and how to install them:
node.js
npm
mongodb
Installing
A step by step series of examples that tell you how to get a development env running:
- Clone the repo
- Install NPM packages
npm install - Create a
.envfile with the necessary environment variables (PORT,MONGO_URL,STRIPE, etc.) - Run the server
npm start
API Endpoints
The API is divided into several sections based on functionality. Most routes under /user, /post, /bible, and /songs require authentication via a session cookie.
Authentication
POST /signup: Creates a new user account.POST /login: Logs in a user and creates a session.GET /logout: Logs out the current user.POST /resetPassword: Sends a password reset link to the user's email.
General
GET /: Returns basic information about the logged-in user.GET /invite/:email: Checks if an invitation exists for a given email.POST /changeProfile: Changes the active profile for the logged-in user.POST /token: Refreshes the push notification token for a profile.POST /subscribe: Subscribes a profile to web push notifications.
Profiles (/user)
GET /mine: Get all profiles for the logged-in user.POST /: Creates a new profile.POST /invite: Invites a new user by email.GET /invite/:email: Get invitation details for an email.GET /groups: Get a list of all groups.GET /groups/following: Get a list of groups the current profile is following.POST /groups: Create a new group.GET /courses: Get a list of all courses.POST /groups/accept: Accept a request to join a private group.POST /groups/reject: Reject a request to join a private group.GET /groups/search: Search for groups.GET /groups/:id: Get details for a specific group.GET /groups/:id/subscribe: Subscribe to a group.GET /groups/:id/unsubscribe: Unsubscribe from a group.GET /search: Search for profiles.POST /setData: Set custom data for a profile.POST /myProfile: Update the current user's profile.GET /:id: Get a specific profile by ID.DELETE /:id: Delete a profile.GET /:id/follow: Follow a profile.GET /:id/unfollow: Unfollow a profile.
Posts (/post)
GET /organic: Get the organic feed for the current user.GET /: Get the feed with promotional content.GET /tag/:tag: Get posts with a specific tag.GET /usr/:id: Get posts from a specific user.GET /usr/:id/images: Get all image posts from a user.GET /usr/:id/embedded: Get all embedded posts from a user.GET /usr/:id/media: Get all media posts from a user.POST /: Create a new post.POST /react: React to a post.POST /unreact: Remove a reaction from a post.POST /bookmark: Bookmark a post.POST /unbookmark: Remove a bookmark from a post.POST /comment: Add a comment to a post.POST /comment/react: React to a comment.POST /comment/unreact: Remove a reaction from a comment.GET /images: Get all image posts for the current user.GET /embedded: Get all embedded posts for the current user.GET /media: Get all media posts for the current user.GET /course/recent: Get recently watched media from courses.GET /:id: Get a specific post by ID.DELETE /:id: Delete a post.POST /:id: Update a post.
Payments (/payments)
POST /create-payment-intent: Creates a Stripe Payment Intent.POST /intent: (Alias for /create-payment-intent)POST /register: Registers a payment after a successful Stripe transaction.
Songs (/songs)
GET /: Get all songs.POST /: Create a new song.GET /:id: Get a specific song by ID.DELETE /:id: Delete a song.POST /:id: Update a song.
Bible (/bible)
GET /: Get a list of available Bibles.GET /books: Get the books of a Bible.GET /books/:bookId: Get details for a specific book.GET /books/:bookId/chapters: Get the chapters of a book.GET /chapters/:chapterId: Get the content of a chapter.GET /chapters/:chapterId/verses: Get the verses of a chapter.GET /search: Search the Bible.
Subsplash (/subsplash)
GET /events/:calendarId: Get events from a Subsplash calendar.GET /media/:seriesId: Get media from a Subsplash media series.
TODO
- Define nodes schema
- Implement basic login/registration
Description
Languages
JavaScript
99.7%
Dockerfile
0.3%