# ToDo * year pagination # Authentication Authentication consists of the following parts: * `next-auth` boilerplate * `middleware.ts` = hooks-up `next-auth` into the page processing pipeline - user session is checked before any page is rendered * `auth.ts` = defines how the authentication is done, and how session is checked (used by middleware) * `/app/api/[...nextauth]/route.ts` = defines route which shows an authentication form Source: * [How to Implement Google Authentication in a Next.js App Using NextAuth](https://www.telerik.com/blogs/how-to-implement-google-authentication-nextjs-app-using-nextauth) * [Next Js 14 Authentication on Edge Runtime](https://www.youtube.com/watch?v=rEopVx0FKGI) # Multi-User Support Each location record is marked with a user ID. All the actions user `withUser` to fetch user ID, which is then used in all the DB operations. # Deploying The deployment is done via Docker: * build docker image * deploy Docker service ## Building Docker image Run the following command: ```bash docker build . -t utility-bills-tracker:1.0.0 ``` The image will be stored in the local Docker instance. ## Deploying Docker service Run the following command: ```bash HOSTNAME=0.0.0.0 \ NEXTAUTH_URL=https://rezije.app \ PORT=3001 \ docker stack deploy \ -c docker-compose-deploy.yml \ utility-bills-tracker ```