🗂️ Project Structure Overview
Top-Level Directories
-
.github - Contains workflow files responsible for CI/CD pipeline.
-
client - Angular frontend application.
-
server - Spring Boot backend application.
- src/main/java/com/saas/springular: Main application code, following a Hybrid package structure:
- common: Shared utilities and logic.
- stripe: Everything related to Stripe integration is encapsulated in this folder. Classes here are package-private, ensuring better encapsulation and easier maintenance.
stripe
directory is a good example of why you should use a hybrid package structure instead of a package-per-layer approach:- Centralized Logic: All Stripe-related code (models, services, controllers, etc.) is located in one place, making it easy to navigate and understand.
- Encapsulation: Every single class in this directory is package-private, reducing unnecessary exposure.
- Easier Feature Extensions: When adding or modifying functionality, you don't need to jump between multiple packages (e.g.,
service
,controller
,repository
). This minimizes cognitive load and speeds up development. - Improved Code Organization: Domain logic isn't scattered across layers, making the application structure more intuitive and maintainable.
- stripe: Everything related to Stripe integration is encapsulated in this folder. Classes here are package-private, ensuring better encapsulation and easier maintenance.
- user: Domain-specific logic for user management.
- <new packages for each domain/feature, not by layer>
- src/main/resources:
- db/migration: Flyway migration scripts in SQL format.
- templates/emails: Email templates (can use Thymeleaf HTML or SendGrid templates).
- application.yml: The main configuration file for the backend application.
- common: Shared utilities and logic.
- src/main/java/com/saas/springular: Main application code, following a Hybrid package structure:
-
docs - Documentation powered by Docusaurus.
- docs: Markdown files for the documentation.
- docusaurus.config.js: Configuration for Docusaurus.
Important Files
-
docker-compose.yml - Defines the infrastructure of the entire project. This file is used for deploying Springular to a VPS using Coolify.
-
docker-compose-test.yml - Test version of
docker-compose.yml
being used in CI/CD workflow.
Reminder: Update this file whenever changes are made todocker-compose.yml
. -
.env - Stores all environment variables.
You can initialize the base.env
file using the following command:cp .env.example .env