Skip to content

Commit

Permalink
Pipline & bug fixes, adding test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
vanshpatelx committed Mar 1, 2025
1 parent ea7cdc1 commit 1122d09
Show file tree
Hide file tree
Showing 15 changed files with 670 additions and 168 deletions.
143 changes: 76 additions & 67 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,40 +44,49 @@ jobs:
- name: ⚙️ Set up Node.js Environment
uses: actions/setup-node@v3
with:
node-version: '22'
node-version: "22"

- name: 📦 Install Node.js Dependencies
run: |
npm install -g turbo
npm install
- name: 🌟 Setup Backend Environment (Variables)
run: |
cd scripts/
chmod +x start.sh
./start.sh
# - name: 🌟 Setup Backend Environment (Variables)
# run: |
# cd scripts/
# chmod +x start.sh
# ./start.sh

- name: ✅ Docker Network creations
run: |
docker network ls | grep main_network || docker network create main_network
- name: 🚀 Run common docker Resources (like pubsub)
- name: 🚀 Run docker Resources (DB, cache, pubsub)
run: |
cd docker
cd common
cd cache
docker compose up -d
cd ..
cd DBS
docker compose up -d
cd ..
cd pubsub
docker compose up -d
echo " 🚀 Docker common resources running"
- name: 🐳 Configure Resources in Docker
run: |
docker compose -f 'docker/docker-compose.resources.yaml' up -d --build --wait
sleep(30) # wait for 30 seconds
- name: ✅ Verify Running Containers
run: docker compose -f 'docker/docker-compose.resources.yaml' ps

run: |
docker compose -f 'docker/cache/docker-compose.yaml' ps
docker compose -f 'docker/DBS/docker-compose.yaml' ps
docker compose -f 'docker/pubsub/docker-compose.yaml' ps
- name: 🐛 Debug Logs on Failure
if: failure()
run: docker compose -f 'docker/docker-compose.resources.yaml' logs --tail=100
run: |
docker compose -f 'docker/cache/docker-compose.yaml' logs --tail=100
docker compose -f 'docker/DBS/docker-compose.yaml' logs --tail=100
docker compose -f 'docker/pubsub/docker-compose.yaml' logs --tail=100
- name: ⚡ Start Turbo Dev Mode
run: |
Expand All @@ -99,52 +108,52 @@ jobs:
run: |
tmux kill-session -t turbo_session || echo "Turbo session not running"
- name: 🧹 Cleanup Resources
run: |
docker compose -f 'docker/docker-compose.resources.yaml' down -v
- name: 🏗️ Build Images
run: |
cd scripts/
chmod +x build_images.sh
./build_images.sh
- name: 🐳 Configure Docker Images + Resources
run: |
docker compose -f 'docker/docker-compose.yaml' up -d --build --wait
- name: ✅ Verify Running Containers
run: docker compose -f 'docker/docker-compose.yaml' ps
- name: 🐛 Debug Logs on Failure
if: failure()
run: docker compose -f 'docker/docker-compose.yaml' logs --tail=100

- name: ⏳ Wait Until All Servers are Up (Docker)
run: |
cd scripts/
chmod +x checkservice.sh
./checkservice.sh
- name: 🔬 Run Tests in /packages/test
run: |
cd packages/test
npm run test
- name: 🔄 Convert JSON to Space-Separated List
id: format_services
run: |
services_list=$(echo '${{ needs.detect-changes.outputs.services }}' | jq -r '.[]' | tr '\n' ' ')
echo "services_list=$services_list" >> "$GITHUB_ENV"
- name: 🔑 Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: 🏷️ Tag Images
run: |
cd scripts/
chmod +x tag_images.sh
./tag_images.sh ${{ secrets.DOCKER_USERNAME }} ${{ github.sha }} $services_list
# - name: 🧹 Cleanup Resources
# run: |
# docker compose -f 'docker/docker-compose.resources.yaml' down -v

# - name: 🏗️ Build Images
# run: |
# cd scripts/
# chmod +x build_images.sh
# ./build_images.sh

# - name: 🐳 Configure Docker Images + Resources
# run: |
# docker compose -f 'docker/docker-compose.yaml' up -d --build --wait

# - name: ✅ Verify Running Containers
# run: docker compose -f 'docker/docker-compose.yaml' ps

# - name: 🐛 Debug Logs on Failure
# if: failure()
# run: docker compose -f 'docker/docker-compose.yaml' logs --tail=100

# - name: ⏳ Wait Until All Servers are Up (Docker)
# run: |
# cd scripts/
# chmod +x checkservice.sh
# ./checkservice.sh

# - name: 🔬 Run Tests in /packages/test
# run: |
# cd packages/test
# npm run test

# - name: 🔄 Convert JSON to Space-Separated List
# id: format_services
# run: |
# services_list=$(echo '${{ needs.detect-changes.outputs.services }}' | jq -r '.[]' | tr '\n' ' ')
# echo "services_list=$services_list" >> "$GITHUB_ENV"

# - name: 🔑 Login to Docker Hub
# uses: docker/login-action@v2
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}

# - name: 🏷️ Tag Images
# run: |
# cd scripts/
# chmod +x tag_images.sh
# ./tag_images.sh ${{ secrets.DOCKER_USERNAME }} ${{ github.sha }} $services_list
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ web_modules
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
Expand Down
Binary file modified backend/.DS_Store
Binary file not shown.
4 changes: 2 additions & 2 deletions backend/auth/src/controllers/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import queryList from "../config/DB/query";
// Define a schema
const userSchema = z.object({
email: z.string().email(),
password: z.string()
password: z.string().nonempty(),
});


Expand Down Expand Up @@ -222,7 +222,7 @@ export const loginUser = async (req: Request, res: Response): Promise<void> => {
const token = generateToken({ id: userId.toString(), email, type });
logger.info({ message: "Auth Login: Token generated", email, userId });

res.status(200).json({ message: "User login successful", token });
res.status(200).json({ message: "User login successfully", token });
logger.info({ message: "Auth: User successfully logged in", email, userId });
} catch (error: unknown) {
logger.error({
Expand Down
6 changes: 4 additions & 2 deletions backend/event/src/controllers/event_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ async def get_all_event(cursor: int, limit: int, user: UserPayload):

if (cached_events := await Cache.get(key)):
logger.info("✅ Cache hit: Events retrieved from Redis.")
return cached_events
return {"message": "Event fetched successfully", "data": cached_events}


logger.info(f"📥 Fetching Live Events for User {user.id} ({user.type})")

Expand All @@ -129,7 +130,8 @@ async def get_all_event(cursor: int, limit: int, user: UserPayload):
await Cache.set(key, events_list, 10)
logger.info(f"✅ Cached {len(events_list)} events for future requests.")

return events_list
return {"message": "Event fetched successfully", "data": events_list}


async def get_specific_event(eventID: str, user: UserPayload):
"""
Expand Down
8 changes: 5 additions & 3 deletions backend/event/src/routes/event_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,10 @@ async def get_event_by_id(eventID: int, user: dict = Depends(get_current_user)):
return await get_specific_event(eventID, user_payload)


@router.get("/events", response_model=List[Dict[str, Any]])
async def get_all_events(cursor: int = 0, limit: int = 50, user: dict = Depends(get_current_user)):
@router.get("/events", response_model=Dict[str, Any])
async def get_all_events(
cursor: int = 0, limit: int = 50, user: dict = Depends(get_current_user)
):
"""
API Endpoint: Retrieve all events with pagination.
Expand All @@ -74,7 +76,7 @@ async def get_all_events(cursor: int = 0, limit: int = 50, user: dict = Depends(
limit (int): Number of events to retrieve.
Returns:
List[Dict[str, Any]]: List of events as dictionaries.
Dict[str, Any]: Response containing events.
"""
return await get_all_event(cursor, limit, UserPayload(**user))

Expand Down
63 changes: 63 additions & 0 deletions data.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
Auth: 5001
cache:6379
DB: 5432
# user:${email}
# token includes:
# generateToken({ id: userId.toString(), email, type });
auth_exchange => auth.registered => auth_queue
Routes:
GET /auth/health
POST /auth/register:Params:{email}:{password}
POST /auth/login:Params:{email}:{password}


DB Server: 5003


Event: 8000
event_exchange => event.registered => event_queue
cache:6380
DB: 5433
# event:{eventID}
# events = live_events:{cursor}:{limit}

Routes:
GET /event/health
POST /event/Params:{Whole Object}
GET /event/{eventID}
GET /event/events/URLParams:{cursor}:{limit}
POST /event/settlements/Params:{eventID}

Testcases:
1. Write first because it's more needed
Ex.
1. Register
1. Register a user
2. Try to register the same user
3. Try to register a user with invalid email
4. Try to register a user with invalid password
5. Try to register a user with invalid Params or Body
2. Login
1. Login a user
2. Try to login a user with invalid email
3. Try to login a user with not registered email
4. Try to login a user with invalid password
5. Try to login a user with invalid Params or Body

3. Create an event
1. Create an event
2. Try to create an event with invalid Params or Body
3. Unauthorizaed means not admin user try to create an event
4. without token try to create an event

4. Get an event
1. Get an event
2. Try to get an event with invalid eventID
3. Try to get an event with invalid Params or Body
4. without token try to get an event

5. Get all live events
1. Get all live events
2. Try to get all live events with invalid Params or Body
3. without token try to get all live events

31 changes: 31 additions & 0 deletions docker/pubsub/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
version: '3.8'

networks:
main_network:
external: true

services:
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
restart: always
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: "admin"
RABBITMQ_DEFAULT_PASS: "password"
RABBITMQ_ERLANG_COOKIE: "secret-cookie"
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS: "-rabbitmq_management load_definitions \"/etc/rabbitmq/definitions.json\""
volumes:
- rabbitmq_data:/var/lib/rabbitmq
- ./rabbitmq/definitions.json:/etc/rabbitmq/definitions.json # Preconfigured Exchanges & Queues
- ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
networks:
- main_network

volumes:
rabbitmq_data:


# docker run --rm rabbitmq:3-management rabbitmqctl hash_password adminpass(passowrd creations)
Loading

0 comments on commit 1122d09

Please sign in to comment.