-
Notifications
You must be signed in to change notification settings - Fork 0
๐ง Terraform ์ธํ๋ผ ๊ตฌ์ฑ ๋ฐ CI/CD ๊ฐ์ #42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Implement POST /api/v1/teams endpoint - Add description to retro_room entity - Add RoomRole to member_retro_room entity - Add RetrospectService for team creation logic - Add TeamCreateRequest/Response DTOs - Update Swagger documentation - Add implementation review doc
- Add POST /api/v1/teams/join endpoint - Implement join logic in RetrospectService - Add JoinTeamRequest/Response DTOs - Add error codes: TEAM4002, TEAM4003, TEAM4041, TEAM4092 - Create API spec and review docs
- Add extract_invite_code function supporting both URL formats: - Path segment: /invite/INV-A1B2-C3D4 - Query parameter: ?code=INV-A1B2-C3D4 - Add 6 unit tests for invite code extraction - Fix unused import warning in auth/handler.rs - Fix dead_code warning in app_config.rs - Update review document with implementation details Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Rename team-related API specs to use retro-room terminology - Update request/response field names for consistency Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add test file guidelines to GEMINI.md - Update team-api review document Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Apply cargo fmt to entity files - Update database config formatting - Update state module formatting Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add JoinRetroRoomRequest/Response DTOs - Update create_retro_room handler with Swagger docs - Add join_retro_room handler with Swagger docs - Update module exports Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add RetroRoom-related error types (InvalidInviteLink, ExpiredInviteLink, etc.) - Update auth service formatting - Update JWT and auth utils formatting Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add /api/v1/retro-rooms route for room creation - Add /api/v1/retro-rooms/join route for room join - Update OpenAPI schema with RetroRoom DTOs Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add retro_room_api_test.rs with mock unit tests - Test room creation and join scenarios Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add order_index field for room ordering functionality - Default value: 1 Co-Authored-By: Claude Opus 4.5 <[email protected]>
- TEAM4004: InvalidOrderData (์๋ชป๋ ์์ ๋ฐ์ดํฐ) - TEAM4031: NoPermission (์์/์ญ์ ๊ถํ ์์) - ROOM4031: NoRoomPermission (์ด๋ฆ ๋ณ๊ฒฝ ๊ถํ ์์) Co-Authored-By: Claude Opus 4.5 <[email protected]>
API-006: GET /api/v1/retro-rooms - List user's retro rooms sorted by orderIndex API-007: PATCH /api/v1/retro-rooms/order - Update retro room order (drag and drop) - Validate orderIndex uniqueness API-008: PATCH /api/v1/retro-rooms/:id/name - Update retro room name (Owner only) - Check name uniqueness API-009: DELETE /api/v1/retro-rooms/:id - Delete retro room (Owner only) - Cascade delete member_retro_room API-010: GET /api/v1/retro-rooms/:id/retrospects - List retrospects in a retro room - Sorted by start_time DESC Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Document all 5 RetroRoom APIs - Include request/response examples - List error codes and entity changes Co-Authored-By: Claude Opus 4.5 <[email protected]>
- 006-retro-room-list.md: ๋ ํธ๋ก๋ฃธ ๋ชฉ๋ก ์กฐํ - 007-retro-room-order.md: ๋ ํธ๋ก๋ฃธ ์์ ๋ณ๊ฒฝ - 008-retro-room-name.md: ๋ ํธ๋ก๋ฃธ ์ด๋ฆ ๋ณ๊ฒฝ - 009-retro-room-delete.md: ๋ ํธ๋ก๋ฃธ ์ญ์ - 010-retro-room-retrospects.md: ํ๊ณ ๋ชฉ๋ก ์กฐํ Remove combined document 006-010-retro-room-apis.md Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add 23 unit tests for DTO validation and serialization - Test validation: title length, description length, URL format, name length, order_index range - Test serialization: camelCase conversion for all response DTOs - Test deserialization: camelCase JSON parsing for request DTOs - Update review documents with test coverage details Total tests: 31 passed Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Move all tests from dto.rs and service.rs to src/tests/ - Create separate test files for each API (004-010) - Add src/tests/mod.rs as central test module - Make extract_invite_code and generate_invite_code public for test access - Update all review documents with new test file locations - Total: 48 tests across 7 API test files Test files created: - api_004_retro_room_create_test.rs (7 tests) - api_005_retro_room_join_test.rs (10 tests) - api_006_retro_room_list_test.rs (4 tests) - api_007_retro_room_order_test.rs (8 tests) - api_008_retro_room_name_test.rs (9 tests) - api_009_retro_room_delete_test.rs (3 tests) - api_010_retro_room_retrospects_test.rs (5 tests) Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Create lib.rs for public module exports (required for integration tests) - Move all API test files from src/tests/ to tests/ directory - Remove #[cfg(test)] mod tests; from main.rs - Update review documents with new test file paths - Create 004-retro-room-create.md review document Test organization: - tests/api_004_retro_room_create_test.rs (7 tests) - tests/api_005_retro_room_join_test.rs (10 tests) - tests/api_006_retro_room_list_test.rs (4 tests) - tests/api_007_retro_room_order_test.rs (8 tests) - tests/api_008_retro_room_name_test.rs (9 tests) - tests/api_009_retro_room_delete_test.rs (3 tests) - tests/api_010_retro_room_retrospects_test.rs (5 tests) Total: 46 integration tests + 2 unit tests = 48 tests Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add min = 1 to title field validation to prevent empty strings - Add test for empty title validation failure - Address CodeRabbit review feedback Co-Authored-By: Claude Opus 4.5 <[email protected]>
1. Add transaction support for create_retro_room and delete_retro_room - Ensures atomicity when creating room + member relationship - Prevents orphaned data on partial failures 2. Use secure random invite code generation - Replace timestamp-based code with rand crate - Prevents predictable invite codes 3. Improve JWT_SECRET security - Only allow default "secret" in debug mode - Require JWT_SECRET env var in production builds 4. Fix Debug format usage for RetroCategory - Add Display trait implementation - Use stable string representation for API responses Co-Authored-By: Claude Opus 4.5 <[email protected]>
- ์์ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋์ญ์ ์ผ๋ก ๋ํํ์ฌ ์์์ฑ ๋ณด์ฅ - ๊ถํ ์ฒดํฌ๋ฅผ ํธ๋์ญ์ ์ธ๋ถ์์ ๋จผ์ ์ํ - RetroRoomOrderItem์ Clone derive ์ถ๊ฐ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- ์กด์ฌํ์ง ์๋ ๋ ํธ๋ก๋ฃธ์ ๋๋ค โ ์กด์ฌํ์ง ์๋ ํ์ ๋๋ค - ๋ ํธ๋ก๋ฃธ ์ด๋ฆ์ ๋ณ๊ฒฝํ ๊ถํ์ด ์์ต๋๋ค โ ํ ์ด๋ฆ์ ๋ณ๊ฒฝํ ๊ถํ์ด ์์ต๋๋ค - ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ๋ ํธ๋ก๋ฃธ ์ด๋ฆ์ ๋๋ค โ ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ํ ์ด๋ฆ์ ๋๋ค - ๋ ํธ๋ก๋ฃธ์ ์ญ์ ํ ๊ถํ์ด ์์ต๋๋ค โ ํ์ ์ญ์ ํ ๊ถํ์ด ์์ต๋๋ค - ํด๋น ๋ ํธ๋ก๋ฃธ์ ์ ๊ทผ ๊ถํ์ด ์์ต๋๋ค โ ํด๋น ํ์ ์ ๊ทผ ๊ถํ์ด ์์ต๋๋ค - dto ๊ฒ์ฆ ๋ฉ์์ง๋ ํ์ผ๋ก ํต์ผ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- RetroRoom API (004~010)์ Retrospect API ๋ณํฉ - AI ์๋น์ค ๋ชจ๋ ์ถ๊ฐ - Team ๋๋ฉ์ธ ๋ชจ๋ ์ถ๊ฐ - ์๋ฌ ํ์ ํตํฉ (RetroRoom + Retrospect) - main.rs ๋ผ์ฐํธ ํตํฉ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- 004-team-create.md - 005-team-join.md - 006-team-list.md - 007-team-order-update.md - 008-team-name-update.md - 009-team-delete.md Co-Authored-By: Claude Opus 4.5 <[email protected]>
PR ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ ๋ฐ์ - ํฅํ ์ฌ์ฉ์ ์ํด variant ์ ์งํ๋ warning ์ ๊ฑฐ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- retro_room.rs: description ํ๋ ์ ์ง + invition_url ์คํค๋ง ์คํ ๋ง ์ ์ง - handler.rs, main.rs, service.rs: import ๋ณํฉ - service.rs: invition_url ํ๋๋ช ์์ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Resolved conflicts in handler.rs, service.rs, main.rs, error.rs - Merged RetroRoom API routes with deprecated login endpoint - Added Auth-related error types (SocialAuthFailed, InvalidToken, etc.) - Added RetroRoom-related error types (InvalidInviteLink, AlreadyMember, etc.) Co-Authored-By: Claude Opus 4.5 <[email protected]>
- handler.rs: user.user_id() ํฌํผ ๋ฉ์๋ ์ฌ์ฉ์ผ๋ก ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ - service.rs: list_retro_rooms N+1 ์ฟผ๋ฆฌ ๋ฌธ์ ํด๊ฒฐ (find_also_related ์ฌ์ฉ) - service.rs: RetrospectMethod Display trait ์ฌ์ฉ์ผ๋ก Debug format ์ ๊ฑฐ - retrospect.rs: RetrospectMethod์ Display trait ๊ตฌํ - app_config.rs: JWT_SECRET ๊ธฐ๋ณธ๊ฐ debug ๋น๋์์๋ง ํ์ฉ - 009-retro-room-delete.md: ์ฝ๋ ๋ธ๋ก ์ธ์ด ํ๊ทธ ์ถ๊ฐ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- JSON ์ง๋ ฌํ ํ ์คํธ: contains() ๋์ serde_json::Value ํ์ฑ์ผ๋ก ๊ฐ์ - ์ด๋ ์ฝ๋ ๊ฒ์ฆ: INV-XXXX-XXXX ์ ํํ ํ์ ๊ฒ์ฆ ์ถ๊ฐ - ๊ธธ์ด 13์ ๊ฒ์ฆ - ํ์ดํ ์์น ๊ฒ์ฆ (์ธ๋ฑ์ค 3, 8) - ์ซ์ ๋ถ๋ถ 4์๋ฆฌ์ฉ ๊ฒ์ฆ - api_005, 007, 008, 009, 010 ํ ์คํธ ํ์ผ ๊ฐ์ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- dto.rs: ๊ฒ์ฆ ๋ฉ์์ง "ํ ์ด๋ฆ" โ "๋ฃธ ์ด๋ฆ" ๋ณ๊ฒฝ - service.rs: update_retro_room_order์ ์ค๋ณต order_index ์ฒดํฌ ์ถ๊ฐ - service.rs: generate_invite_code ์ถฉ๋ ๋ฐฉ์ง retry ๋ก์ง ์ถ๊ฐ (MAX_RETRY=5) - error.rs: ValidationErrors์์ name/retro_room_orders ํ๋ ๋งคํ ์ถ๊ฐ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- ํ์ผ๋ช ๋ณ๊ฒฝ: team โ retro-room (004-010) - ๋ฌธ์ ๋ด์ฉ "ํ" โ "ํ๊ณ ๋ฐฉ" ๋ณ๊ฒฝ - ์๋ฌ ์ฝ๋ TEAM* โ RETRO* ๋ณ๊ฒฝ - ์๋ํฌ์ธํธ /teams/ โ /retro-rooms/ ๋ณ๊ฒฝ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- team ๋ชจ๋ ์ญ์ (codes/server/src/domain/team/) - ์๋ฌ ์ฝ๋ ๋ณ๊ฒฝ: TEAM* โ RETRO* - TEAM4004 โ RETRO4004 (์๋ชป๋ ์์ ๋ฐ์ดํฐ) - TEAM4031 โ RETRO4031 (๊ถํ ์์) - TEAM4041 โ RETRO4041 (ํ๊ณ ๋ฐฉ ์์) - ์๋ฌ ํ์ ์ด๋ฆ ๋ณ๊ฒฝ: - TeamAccessDenied โ RetroRoomAccessDenied - TeamNotFound โ RetroRoomNotFound - ์๋ฌ ๋ฉ์์ง "ํ" โ "ํ๊ณ ๋ฐฉ" ๋ณ๊ฒฝ - database.rs์์ team ํ ์ด๋ธ ์ฐธ์กฐ ์ ๊ฑฐ Co-Authored-By: Claude Opus 4.5 <[email protected]>
1. ValidationErrors ํ๋ ๋งคํ ์ถ๊ฐ - title ํ๋ ๊ฒ์ฆ ์คํจ ์ RETRO4001 ๋ฐํ 2. ์๋ฌ ์ฝ๋ ์คํ ์ผ์น - ํ๊ณ ๋ฐฉ ๋ฏธ์กด์ฌ ์ RETRO4041 (RetroRoomNotFound) ๋ฐํ - ๋ฉค๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ RETRO4031 (403) ๋ฐํ 3. API-007 ํ๊ณ ๋ฐฉ ์กด์ฌ ์ฌ๋ถ ํ์ธ ๋ก์ง ์ถ๊ฐ - ์กด์ฌํ์ง ์๋ retroRoomId ํฌํจ ์ RETRO4041 ๋ฐํ - ๋ฉค๋ฒ์ญ ํ์ธ ์ ๋ฃธ ์กด์ฌ ์ฌ๋ถ ์ฐ์ ํ์ธ 4. API-008/009 ๊ถํ ๊ฒ์ฆ ๋ก์ง ์์ - ๋ฉค๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ 403 ๋ฐํ (๊ธฐ์กด 404 โ 403) 5. API-005 ์ด๋ ์ฝ๋ ํ์ ๊ฒ์ฆ ๊ฐํ - INV-XXXX-XXXX ํ์ ๊ฒ์ฆ ์ถ๊ฐ - code= ํ๋ผ๋ฏธํฐ์ ํ์ ๊ฒ์ฆ 6. ์ฑ๊ณต ์๋ต ๋ฉ์์ง API ์คํ ์ผ์น - ๊ฐ API๋ณ ์คํ์ ๋ง๋ ๋ฉ์์ง๋ก ๋ณ๊ฒฝ Co-Authored-By: Claude Opus 4.5 <[email protected]>
1. FK ON DELETE CASCADE ์ ์ฉ - member_retro_room: retro_room/member ์ญ์ ์ cascade - retrospect: retro_room ์ญ์ ์ cascade - response: retrospect ์ญ์ ์ cascade - response_comment: response/member ์ญ์ ์ cascade - response_like: response/member ์ญ์ ์ cascade - retro_reference: retrospect ์ญ์ ์ cascade - member_retro: member/retrospect ์ญ์ ์ cascade - member_response: member/response ์ญ์ ์ cascade 2. ์ด๋ ์ฝ๋ ๋ง๋ฃ ๊ธฐ์ค ๋ณด๊ฐ - retro_room์ invite_code_created_at ์ปฌ๋ผ ์ถ๊ฐ - ๋ง๋ฃ ์ฒดํฌ ์ invite_code_created_at ๊ธฐ์ค ์ฌ์ฉ - ํฅํ ์ด๋ ์ฝ๋ ์ฌ๋ฐ๊ธ ์ ์ด ๊ฐ๋ง ์ ๋ฐ์ดํธํ๋ฉด ๋จ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- MAX_RETRY ํ์๋ ์ ๋ํฌํ ์ฝ๋ ์์ฑ ์คํจ ์ ์๋ฌ ๋ฐํ - ๊ธฐ์กด: ๋ง์ง๋ง ์์ฑ๋ ์ฝ๋๋ฅผ ๊ฒ์ฆ ์์ด ์ฌ์ฉ (์ ์ฌ์ ์ค๋ณต) - ์์ : is_unique ํ๋๊ทธ๋ก ์ ๋ํฌ ํ์ธ, ์คํจ ์ InternalError Co-Authored-By: Claude Opus 4.5 <[email protected]>
- if let Some(mr) ๋์ ok_or_else() ์ฌ์ฉ - ๋์ ์ญ์ ์ ์ ์ฒด ํธ๋์ญ์ ๋กค๋ฐฑ๋๋๋ก ์์ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- DB unique constraint violation ์ฒ๋ฆฌ ์ถ๊ฐ - ๋์ ์์ฒญ ์์๋ ์ค๋ณต ๋ฉค๋ฒ์ญ ์์ฑ ๋ฐฉ์ง Co-Authored-By: Claude Opus 4.5 <[email protected]>
- VPC, ์๋ธ๋ท, ๋ผ์ฐํธ ํ ์ด๋ธ ๊ตฌ์ฑ - EC2 ์ธ์คํด์ค (Amazon Linux 2023, t3.micro) - RDS PostgreSQL 15 (db.t3.micro) - ๋ณด์ ๊ทธ๋ฃน (EC2, RDS ๋ถ๋ฆฌ) - Elastic IP ํ ๋น - README ๋ฐ ์์ ๋ณ์ ํ์ผ ํฌํจ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- .claude/settings.local.json ์ ์ธ - .gemini/ ๋๋ ํ ๋ฆฌ ์ ์ธ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- RDS: PostgreSQL 15 โ MySQL 8.0 - EC2: Amazon Linux 2023 โ Ubuntu 24.04 LTS - ๋ณด์๊ทธ๋ฃน ํฌํธ: 5432 โ 3306 - user_data ์คํฌ๋ฆฝํธ Ubuntu์ฉ์ผ๋ก ์์ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- terraform.yml: ci/terraform/** ๋ณ๊ฒฝ ์ ์ธํ๋ผ ๋ฐฐํฌ - PR: plan ๊ฒฐ๊ณผ ์ฝ๋ฉํธ๋ก ํ์ - main ๋จธ์ง: ์๋ apply - deploy.yml: codes/** ๋ณ๊ฒฝ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ - ๋น๋, ํ ์คํธ, EC2 ๋ฐฐํฌ - backend.tf: S3 + DynamoDB ์ํ ๊ด๋ฆฌ ์ธํ๋ผ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- terraform.yml: dev ๋ธ๋์น ๊ธฐ์ค์ผ๋ก ๋ณ๊ฒฝ - deploy.yml: dev ๋ธ๋์น ๊ธฐ์ค์ผ๋ก ๋ณ๊ฒฝ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- DATABASE_URL, RUST_LOG, SERVER_HOST, SERVER_PORT ํ๊ฒฝ๋ณ์ ์ค์ - GitHub Secrets์์ ๊ฐ์ ๊ฐ์ ธ์ EC2์ .env ํ์ผ ์์ฑ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- .env.example ๊ธฐ์ค ๋ชจ๋ ํ๊ฒฝ๋ณ์ ์ถ๊ฐ - Database, Server, Security, Social Login, AI Service ์ค์ Co-Authored-By: Claude Opus 4.5 <[email protected]>
- .gemini/GEMINI.md ์ญ์ ์ ์ง (gitignore์ ํฌํจ) Co-Authored-By: Claude Opus 4.5 <[email protected]>
- db_max_allocated_storage ๊ธฐ๋ณธ๊ฐ 100GB โ 20GB ๋ณ๊ฒฝ - ํ๋ฆฌํฐ์ด ์ด๊ณผ ๋น์ฉ ๋ฐ์ ๋ฐฉ์ง Co-Authored-By: Claude Opus 4.5 <[email protected]>
- backend.tf: S3 ๋ฐฑ์๋ ์ฃผ์ ํด์ (์ํ ํ์ผ ํ ๊ณต์ ) - deploy.yml: ๊ฐ๋ณ secrets โ ENV_FILE ํ๋๋ก ํตํฉ - vpc.tf: route_table_association count ์์ - .terraform.lock.hcl: provider ๋ฒ์ ์ ๊ธ ํ์ผ ์ถ๊ฐ Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
๐ WalkthroughWalkthroughTwo files were updated with import and OpenAPI schema declaration reordering. The changes consolidate and reorganize import lists in the handler module and reorder DTO type names in the OpenAPI derive attribute in the main module. No functional or semantic changes occurred. Changes
Estimated code review effort๐ฏ 1 (Trivial) | โฑ๏ธ ~5 minutes Poem
๐ฅ Pre-merge checks | โ 2 | โ 1โ Failed checks (1 warning)
โ Passed checks (2 passed)
โ๏ธ Tip: You can configure your own custom pre-merge checks in the settings. โจ Finishing touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- deploy.yml: ENV_FILE ๋จ์ํ ์ ์ง - backend.tf: S3 ๋ฐฑ์๋ ํ์ฑํ ์ ์ง - vpc.tf: var ๊ธฐ๋ฐ count ์ ์ง Co-Authored-By: Claude Opus 4.5 <[email protected]>
Terraform Format ๐
|
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Terraform Format ๐
|
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Terraform Format ๐
|
Summary
์์ฑ๋๋ ๋ฆฌ์์ค
GitHub Secrets ํ์
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYEC2_KEY_NAME,DB_USERNAME,DB_PASSWORDEC2_HOST,EC2_SSH_KEY,ENV_FILETest plan
terraform init์ฑ๊ณตterraform apply์ฑ๊ณต (24๊ฐ ๋ฆฌ์์ค ์์ฑ)terraform init -migrate-state์ฑ๊ณต (S3 ๋ฐฑ์๋ ๋ง์ด๊ทธ๋ ์ด์ )๐ค Generated with Claude Code
Summary by CodeRabbit
โ๏ธ Tip: You can customize this high-level summary in your review settings.