155 lines
4.9 KiB
Markdown
155 lines
4.9 KiB
Markdown
# MedReport README
|
|
|
|
## Prerequisites
|
|
|
|
```json
|
|
"node": ">=20.0.0",
|
|
"pnpm": ">=9.0.0"
|
|
```
|
|
|
|
## Project structure
|
|
|
|
```text
|
|
/ app - pages
|
|
/ components - custom components, helper components that not provided by any package. Place to extend an redefine components from packages
|
|
/ config - bunch of configs, that are provided by starter kit.
|
|
/ content - (temporary?) - to be removed when cleaned all dependencies
|
|
/ fonts - (temporary) - contains fonts, should be relocated to another place (maybe public)
|
|
/ lib - diffirent libs, services, utils
|
|
- fonts.ts - project fonts setup, which becomes available as a global css variable
|
|
/ i18n - translations/localization setup
|
|
/ public - public assets
|
|
/ locales - translations under a corresponding local - at a specific namespace
|
|
/ styles - all styles of the projects, including tailwind variable setup
|
|
- global.css - Global styles for the entire application, a place where should apply variables to global selectors
|
|
- shadcn-ui.css - A place where all global variables are defined for color, sizes and etc, that are used in theme.css. Variables defined here and in theme.css are available as tailwindcss property-class
|
|
- theme.css - more specific variables, available as tailwindcss property-class
|
|
- makerkit.css - Makerkit-specific global styles
|
|
- markdoc.css - Styles for Markdoc Markdown files.
|
|
-
|
|
/ supabase - primary supabase
|
|
/ tooling - a workspace package, used for generation packages in node_modules and provides global links for its data. The most important is typescript config
|
|
/ utils
|
|
```
|
|
|
|
## Migration from old structure
|
|
|
|
```bash
|
|
pnpm clean
|
|
pnpm i
|
|
```
|
|
|
|
if you get missing dependency error do `pnpm i --force`
|
|
|
|
## Adding new dependency
|
|
|
|
```bash
|
|
pnpm add <pacakge-name> -w
|
|
```
|
|
|
|
## Eslint and prettier
|
|
|
|
To clean code run
|
|
|
|
```bash
|
|
npm run lint:fix
|
|
```
|
|
|
|
```bash
|
|
npm run prettier:fix
|
|
```
|
|
|
|
## Supabase
|
|
|
|
Start supabase in docker
|
|
|
|
```bash
|
|
npm run supabase:start
|
|
```
|
|
|
|
Link your local supabase with a supabase project
|
|
|
|
```bash
|
|
npm run supabase:deploy
|
|
```
|
|
|
|
After editing supabase tables/functions etc update migration files
|
|
|
|
```bash
|
|
npm run supabase:db:diff
|
|
```
|
|
|
|
To update database types run:
|
|
|
|
```bash
|
|
npm run supabase:typegen:app
|
|
```
|
|
|
|
## Medusa store
|
|
|
|
To get medusa store working you need to update the env's to your running medusa app and migrate the tables from medusa project to your supabase project
|
|
|
|
You can get `NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY` from your medusa app settings
|
|
|
|
## Super admin
|
|
|
|
To access admin pages follow these steps:
|
|
|
|
- Register new user
|
|
- Go to Profile and add Multi-Factor Authentication
|
|
- Authenticate with mfa (at current time profile page prompts it again)
|
|
- update your role. look at `supabase/sql/super-admin.sql`
|
|
- Sign out and Sign in
|
|
|
|
## Company User
|
|
|
|
- With admin account go to `http://localhost:3000/admin/accounts`
|
|
- For Create Company Account to work you need to have rows in `medreport.roles` table. For that you can sql in `supabase/sql/super-admin.sql`
|
|
|
|
## Start email server
|
|
|
|
`docker run -p 1080:1080 -p 1025:1025 maildev/maildev`
|
|
|
|
- [View emails](http://localhost:1080/#/)
|
|
- Mail server is running on `localhost:1025` without password
|
|
|
|
## Medipost flow
|
|
|
|
1. Customer adds analysis to cart in **B2B** storefront
|
|
2. Customer checks out from cart and is redirected to **Montonio**
|
|
3. Customer pays and is redirected back to **B2B** `GET B2B/home/cart/montonio-callback?order-token=$JWT`
|
|
|
|
- **Medusa** order is created and cart is emptied
|
|
- email is sent to customer
|
|
- B2B sends order XML as private message to Medipost.
|
|
|
|
When **Montonio** has confirmed payment, it will call **Medusa** webhook endpoint and **Medusa** will mark order payment as captured.
|
|
|
|
In background a job will call `POST B2B/api/job/sync-analysis-results` every n minutes and sync private messages with responses from **Medipost**.
|
|
|
|
In local dev environment, you can create a private message with analysis responses in **Medipost** system for a submitted order:
|
|
`POST B2B/api/order/medipost-test-response body={medusaOrderId:'input here'}`
|
|
After that run `POST /api/job/sync-analysis-results` and analysis results should be synced.
|
|
|
|
In local dev environment, you can import products from B2B to Medusa with this API:
|
|
|
|
- `POST /api/job/sync-analysis-groups-store`
|
|
- Syncs required data of `analyses`, `analysis_elements` data from **B2B** to **Medusa** and creates relevant products and categories.
|
|
If product or category already exists, then it is not recreated. Old entries are not deleted either currently.
|
|
|
|
## Jobs
|
|
|
|
Required headers:
|
|
|
|
- `x-jobs-api-key` in UUID format
|
|
|
|
Endpoints:
|
|
|
|
- `POST /api/job/sync-analysis-groups`
|
|
- Queries **Medipost** for public messages list and takes analysis info from the latest event.
|
|
Updates `analyses` and `analysis_elements` lists in **B2B**.
|
|
- `POST /api/job/sync-analysis-results`
|
|
- Queries **Medipost** for latest private message that has a response and updates order analysis results from lab results data.
|
|
- `POST /api/job/sync-connected-online`
|
|
- TODO
|