Skip to content

Commit af74aca

Browse files
authored
Merge pull request #4 from WillACosta/feature/implement-auth
[AUTOMATED-PR] - main <- feature/implement-auth
2 parents 9c83bba + fb0950e commit af74aca

File tree

39 files changed

+778
-117
lines changed

39 files changed

+778
-117
lines changed

.env-example

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
1+
PORT=3000
2+
IS_DOCKER=false
3+
14
LANGCHAIN_API_KEY=
25
LANGCHAIN_TRACING_V2=true
36
LANGCHAIN_CALLBACKS_BACKGROUND=true
47

5-
GOOGLE_GENAI_API_KEY=
8+
LLM_API_KEY=
9+
10+
REDIS_URL=redis://127.0.0.1:6379
11+
REDIS_URL_DOCKER=redis://redis:6379
12+
REDIS_USER=
13+
REDIS_PASSWORD=
14+
15+
DATABASE_URL=postgresql://genaiapp:password@localhost:5432/app_db?schema=public
16+
DATABASE_URL_DOCKER=postgresql://genaiapp:password@postgres:5432/app_db?schema=public
617

7-
REDIS_ENDPOINT_URI=localhost:6379
8-
REDIS_PASSWORD=redis@dev
18+
JWT_SECRET=
19+
JWT_EXPIRATION=1h

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
{
22
"cSpell.words": [
3+
"dataprovider",
34
"dataproviders",
45
"gemini",
56
"nodenext",
7+
"predev",
8+
"prestart",
69
"usecases"
710
]
811
}

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ This is an Express service written in [TypeScript](https://www.typescriptlang.or
1414
- [Google Gemini - API](https://ai.google.dev/)
1515
- [Docker](https://docs.docker.com/) Containers for setting up environment.
1616
- [Redis](https://redis.io/) database for storing AI messages.
17+
- [ZOD](https://zod.dev/) as body parameters validation.
1718

1819
## Project Structure
1920

docker-compose.yaml

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,48 @@
1-
version: '3.8'
2-
31
services:
42
app:
3+
container_name: genai_app
54
build:
65
context: .
76
dockerfile: Dockerfile
87
ports:
98
- '3000:3000'
109
env_file:
1110
- .env
11+
environment:
12+
IS_DOCKER: true
13+
DATABASE_URL: ${DATABASE_URL_DOCKER}
14+
REDIS_URL: ${REDIS_URL_DOCKER}
1215
volumes:
1316
- ./src:/usr/workspace/app/src
1417
- pnpm_store:/pnpm/.pnpm-store
15-
command: sh -c "pnpm install && pnpm dev"
18+
command: sh -c "pnpm install && node dynamic-url-config.js && npx prisma generate && pnpm dev"
19+
depends_on:
20+
- postgres
21+
- redis
1622

1723
postgres:
24+
container_name: genai_app_postgres
1825
image: bitnami/postgresql:latest
26+
environment:
27+
POSTGRES_USER: genaiapp
28+
POSTGRES_PASSWORD: password
29+
POSTGRES_DB: genaiapp_db
1930
ports:
2031
- '5432:5432'
21-
environment:
22-
- POSTGRES_USER=docker
23-
- POSTGRES_PASSWORD=docker
24-
- POSTGRES_DB=rag_app
2532
volumes:
26-
- 'rag_app_postgres_data:/bitnami/postgresql'
33+
- 'genai_app_postgres_data:/bitnami/postgresql'
2734

2835
redis:
36+
container_name: genai_app_redis
2937
image: bitnami/redis:latest
38+
environment:
39+
ALLOW_EMPTY_PASSWORD: yes
3040
ports:
3141
- '6379:6379'
32-
environment:
33-
- ALLOW_EMPTY_PASSWORD=yes
3442
volumes:
35-
- 'rag_app_redis_data:/bitnami/redis/data'
43+
- 'genai_app_redis_data:/bitnami/redis/data'
3644

3745
volumes:
3846
pnpm_store:
39-
rag_app_redis_data:
40-
rag_app_postgres_data:
47+
genai_app_redis_data:
48+
genai_app_postgres_data:

dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ RUN mkdir -p $PNPM_HOME
99

1010
RUN pnpm config set store-dir "$PNPM_HOME/.pnpm-store" --global
1111

12-
COPY package.json pnpm-lock.yaml* ./
12+
COPY package.json pnpm-lock.yaml* dynamic-url-config.js ./
1313
RUN pnpm install --frozen-lockfile
1414
COPY . .
1515

dynamic-url-config.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
const fs = require('fs')
2+
const dotenv = require('dotenv')
3+
4+
if (fs.existsSync('.env')) {
5+
dotenv.config()
6+
}
7+
8+
const isDocker = process.env.IS_DOCKER === 'true'
9+
10+
const databaseUrl = isDocker
11+
? process.env.DATABASE_URL_DOCKER
12+
: process.env.DATABASE_URL
13+
14+
const redisUrl = isDocker ? process.env.REDIS_URL_DOCKER : process.env.REDIS_URL
15+
16+
if (databaseUrl) {
17+
process.env.DATABASE_URL = databaseUrl
18+
console.log(`Using DATABASE_URL: ${databaseUrl}`)
19+
} else {
20+
console.error(
21+
'DATABASE_URL is not set. Please check your environment variables.',
22+
)
23+
24+
process.exit(1)
25+
}
26+
27+
if (redisUrl) {
28+
process.env.REDIS_URL = redisUrl
29+
console.log(`Using REDIS_URL: ${redisUrl}`)
30+
} else {
31+
console.error(
32+
'REDIS_URL is not set. Please check your environment variables.',
33+
)
34+
35+
process.exit(1)
36+
}

package.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"version": "1.0.0",
44
"description": "This is an Express service that provides authorization functionality and includes gen-AI features.",
55
"scripts": {
6+
"prestart": "node dynamic-url-config.js",
7+
"predev": "node dynamic-url-config.js",
68
"start": "tsx src/app.ts",
79
"dev": "tsx watch src/app.ts"
810
},
@@ -20,25 +22,30 @@
2022
"@langchain/core": "^0.3.3",
2123
"@langchain/google-genai": "^0.1.0",
2224
"@langchain/redis": "^0.1.0",
25+
"@prisma/client": "5.20.0",
2326
"@types/redis": "^4.0.11",
24-
"dotenv": "^16.4.5",
2527
"express": "^4.21.0",
28+
"jsonwebtoken": "^9.0.2",
2629
"langchain": "^0.3.2",
2730
"multer": "1.4.5-lts.1",
2831
"pdf-parse": "^1.1.1",
29-
"redis": "^4.7.0"
32+
"redis": "^4.7.0",
33+
"zod": "^3.23.8"
3034
},
3135
"devDependencies": {
3236
"@types/cors": "^2.8.17",
3337
"@types/express": "^4.17.21",
38+
"@types/jsonwebtoken": "^9.0.7",
3439
"@types/multer": "^1.4.12",
3540
"@types/node": "^22.5.5",
3641
"cors": "^2.8.5",
42+
"dotenv": "^16.4.5",
3743
"nodemon": "^3.1.4",
44+
"prisma": "^5.20.0",
3845
"ts-node": "^10.9.2",
3946
"tslib": "^2.7.0",
4047
"tsx": "^4.19.1",
4148
"typescript": "^5.6.2"
4249
},
4350
"packageManager": "[email protected]+sha512.0a203ffaed5a3f63242cd064c8fb5892366c103e328079318f78062f24ea8c9d50bc6a47aa3567cabefd824d170e78fa2745ed1f16b132e16436146b7688f19b"
44-
}
51+
}

0 commit comments

Comments
 (0)