refactor: rename delta-force-guide to ahsarah-guide and merge into monorepo

- Merge delta-force-guide-server into server/ subdirectory
- Merge delta-force-guide-web into web/ subdirectory
- Rename Java package com.onixbyte.deltaforceguide to com.onixbyte.ahsarahguide
- Rename DeltaForceGuideApplication to AhsarahGuideApplication
- Update all config files, Dockerfiles, and CI workflows
- Update frontend display name and repo links
- Update legal documents (EULA, PrivacyPolicy)
- Create root-level CLAUDE.md, README.md, LICENCE, .gitignore, .gitattributes
- Move CI workflows to root .gitea/workflows/ with working-directory
- Delete .gitlab-ci.yml (legacy)
- Preserve git history from both original repositories
This commit is contained in:
siujamo committed 2026-08-28 09:51:36 +08:00
1 parent a2b94dfda5
commit 33a7c32b1e
144 files changed
+492 -966

No files matched your search

File renamed without changes.
@@ -5,11 +5,14 @@ on:
types: [published] types: [published]
env: env:
APP_NAME: delta-force-guide-server APP_NAME: ahsarah-guide-server
jobs: jobs:
build-and-release: build-and-release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
defaults:
run:
working-directory: server
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -63,8 +66,8 @@ jobs:
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
context: . context: server
file: Dockerfile.ci file: server/Dockerfile.ci
build-args: | build-args: |
JAR_FILE=${{ steps.jar.outputs.file }} JAR_FILE=${{ steps.jar.outputs.file }}
IMAGE_VERSION=${{ gitea.event.release.tag_name }} IMAGE_VERSION=${{ gitea.event.release.tag_name }}
@@ -83,4 +86,4 @@ jobs:
with: with:
destination_container_repo: ${{ vars.DOCKER_HUB_USERNAME }}/${{ env.APP_NAME }} destination_container_repo: ${{ vars.DOCKER_HUB_USERNAME }}/${{ env.APP_NAME }}
provider: dockerhub provider: dockerhub
readme_file: README.md readme_file: server/README.md
@@ -8,6 +8,9 @@ jobs:
build: build:
name: Build release archive name: Build release archive
runs-on: ubuntu-latest runs-on: ubuntu-latest
defaults:
run:
working-directory: web
steps: steps:
- name: Checkout code - name: Checkout code
+41 -87
View File
@@ -97,29 +97,6 @@ fabric.properties
# Editor-based HTTP Client # Editor-based HTTP Client
http-client.private.env.json http-client.private.env.json
### Gradle
.gradle
**/build/
!**/src/**/build/
# Ignore Gradle GUI config
gradle-app.setting
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar
# Avoid ignore Gradle wrappper properties
!gradle-wrapper.properties
# Cache of project
.gradletasknamecache
# Eclipse Gradle plugin generated files
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath
### Java ### Java
# Compiled class file # Compiled class file
*.class *.class
@@ -146,10 +123,29 @@ gradle-app.setting
hs_err_pid* hs_err_pid*
replay_pid* replay_pid*
### Gradle
.gradle
**/build/
!**/src/**/build/
!gradle/
!gradle/wrapper
!gradle/wrapper/gradle-wrapper.jar
!gradle/wrapper/gradle-wrapper.properties
gradle-app.setting
.gradletasknamecache
# Eclipse Gradle plugin generated files
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath
gradle.properties
### Node.js ### Node.js
# Logs # Logs
logs logs
#*.log
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
@@ -164,9 +160,6 @@ pids
*.seed *.seed
*.pid.lock *.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul # Coverage directory used by tools like istanbul
coverage coverage
*.lcov *.lcov
@@ -174,25 +167,10 @@ coverage
# nyc test coverage # nyc test coverage
.nyc_output .nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories # Dependency directories
node_modules/ node_modules/
jspm_packages/ jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache # TypeScript cache
*.tsbuildinfo *.tsbuildinfo
@@ -205,9 +183,6 @@ web_modules/
# Optional stylelint cache # Optional stylelint cache
.stylelintcache .stylelintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack' # Output of 'npm pack'
*.tgz *.tgz
@@ -231,45 +206,9 @@ out
.nuxt .nuxt
dist dist
# Gatsby files # Vite logs files
.cache/ vite.config.js.timestamp-*
# Comment in the public line in if your project uses Gatsby and not Next.js vite.config.ts.timestamp-*
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
#.cache
# Sveltekit cache directory
.svelte-kit/
# vitepress build output
**/.vitepress/dist
# vitepress cache directory
**/.vitepress/cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# Firebase cache directory
.firebase/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions # Stores VSCode versions used for testing VSCode extensions
.vscode-test .vscode-test
@@ -283,6 +222,21 @@ dist
!.yarn/sdks !.yarn/sdks
!.yarn/versions !.yarn/versions
# Vite logs files ### Server-specific
vite.config.js.timestamp-* # Config
vite.config.ts.timestamp-* server/config/*.yml
server/config/*.yaml
server/config/*.properties
# Tests
server/test/
# frp config
frpc.toml
### Claude Code
.claude/settings.local.json
.claude/memory/
.claude/plans/
.claude/worktrees/
.claude/scheduled_tasks.json
+72 -28
View File
@@ -2,16 +2,25 @@
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Coding Standards ## Monorepo Structure
- `server/` — Java 21 + Spring Boot 3.5 + Gradle (Kotlin DSL) REST API backend
- `web/` — React 19 + Vite 8 + TypeScript + Ant Design 6 + Tailwind CSS 4 frontend
## Server
### Coding Standards
- **Style**: Follow the Google Java Coding Style as the foundation. - **Style**: Follow the Google Java Coding Style as the foundation.
- **Indentation**: Use 4 spaces — no tabs. - **Indentation**: Use 4 spaces — no tabs.
- **Line length**: Maximum 100 characters per line. - **Line length**: Maximum 100 characters per line.
- **Comments**: All code comments must use British English spelling (e.g. "colour" not "color", "behaviour" not "behavior", "serialise" not "serialize", "analyse" not "analyze", "traveller" not "traveler"). - **Comments**: All code comments must use British English spelling (e.g. "colour" not "color", "behaviour" not "behavior", "serialise" not "serialize", "analyse" not "analyze", "traveller" not "traveler").
## Build & Test Commands ### Build & Test Commands
```bash ```bash
cd server
# Build the project (skip tests) # Build the project (skip tests)
./gradlew build -x test ./gradlew build -x test
@@ -19,10 +28,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
./gradlew test ./gradlew test
# Run a single test class # Run a single test class
./gradlew test --tests "com.onixbyte.deltaforceguide.service.PasswordEncoderTest" ./gradlew test --tests "com.onixbyte.ahsarahguide.service.PasswordEncoderTest"
# Run a specific test method
./gradlew test --tests "com.onixbyte.deltaforceguide.service.PasswordEncoderTest.generatePassword"
# Build the full JAR # Build the full JAR
./gradlew bootJar ./gradlew bootJar
@@ -30,14 +36,14 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
The project uses Gradle with Java 21 (Amazon Corretto). Tests use JUnit 5 with the Spring Boot test framework, H2 in-memory database for test runtime, and Spring Security test support. Tests require an active `dev` profile. The project uses Gradle with Java 21 (Amazon Corretto). Tests use JUnit 5 with the Spring Boot test framework, H2 in-memory database for test runtime, and Spring Security test support. Tests require an active `dev` profile.
## Code Architecture ### Code Architecture
**Delta Force Guide Server** — A REST API backend for managing Delta Force game firearm builds/modifications. **Ahsarah Guide Server** — A REST API backend for managing firearm builds/modifications.
### Package structure ### Package structure
``` ```
com.onixbyte.deltaforceguide com.onixbyte.ahsarahguide
├── client/ # External service clients (TokenClient for JWT) ├── client/ # External service clients (TokenClient for JWT)
├── config/ # Spring beans: Security, CORS, Cache/Redis, Jackson, MyBatis, Spring Data ├── config/ # Spring beans: Security, CORS, Cache/Redis, Jackson, MyBatis, Spring Data
├── controller/ # REST controllers (Firearm, Modification, Tag, Auth) ├── controller/ # REST controllers (Firearm, Modification, Tag, Auth)
@@ -65,16 +71,9 @@ com.onixbyte.deltaforceguide
- **JPA + native queries**: Most CRUD uses Spring Data JPA. Native queries (in `ModificationRepository`) handle JSONB tag filtering with Postgres `@>` operator. - **JPA + native queries**: Most CRUD uses Spring Data JPA. Native queries (in `ModificationRepository`) handle JSONB tag filtering with Postgres `@>` operator.
- **Custom auth flow**: JWT tokens in httpOnly cookies (`AccessToken`). Spring Security with a custom `UsernamePasswordAuthenticationProvider` and `TokenAuthenticationFilter`. Tokens are auto-renewed within 5 min of expiry. - **Custom auth flow**: JWT tokens in httpOnly cookies (`AccessToken`). Spring Security with a custom `UsernamePasswordAuthenticationProvider` and `TokenAuthenticationFilter`. Tokens are auto-renewed within 5 min of expiry.
- **JSONB storage**: `Modification.tags` and `Modification.accessories` (including nested `Tuning` objects) are stored as JSONB columns using Hypersistence Utils `JsonType`. - **JSONB storage**: `Modification.tags` and `Modification.accessories` (including nested `Tuning` objects) are stored as JSONB columns using Hypersistence Utils `JsonType`.
- **Strict layering**: The call chain must follow `Controller → Service → Manager → Repository/Mapper`. Skipping layers (e.g. Controller calling Manager directly, Service calling Repository directly) is not permitted. Each layer has a distinct responsibility: Controller handles HTTP concerns, Service contains business logic, Manager manages `@Transactional` boundaries and data access coordination, Repository/Mapper handles raw data access. - **Strict layering**: The call chain must follow `Controller → Service → Manager → Repository/Mapper`. Skipping layers (e.g. Controller calling Manager directly, Service calling Repository directly) is not permitted.
- **DTOs as Java records**: All request/response objects are immutable records with static `from()` factory methods for entity→DTO conversion. - **DTOs as Java records**: All request/response objects are immutable records with static `from()` factory methods for entity→DTO conversion.
- **Flyway migrations**: SQL migrations in `src/main/resources/db/migration/` — V2 (init), V3 (bullet/damage fields), V4 (user), V5 (accessories JSONB column). - **Flyway migrations**: SQL migrations in `src/main/resources/db/migration/`.
### Data model
- `firearm` table: id, name, type (int→FirearmType enum), level, calibre, fire_rate, armour_damage, body_damage, review
- `modification` table: id, firearm_id (FK→firearm), name, code, tags (jsonb), accessories (jsonb), note, author, video_url
- `app_user` table: id, username, email
- `user_credential` table: user_id, provider, credential (hashed)
### API endpoints ### API endpoints
@@ -94,16 +93,61 @@ com.onixbyte.deltaforceguide
Conventional commits: `feat:`, `chore:`, `fix:`. Messages are in English, present tense imperative style. Conventional commits: `feat:`, `chore:`, `fix:`. Messages are in English, present tense imperative style.
### External dependencies ---
- **DB**: PostgreSQL (via Flyway migrations), H2 in test ## Web
- **Cache**: Redis (via Spring Cache + RedisTemplate with GenericJackson2JsonRedisSerializer)
- **Auth**: java-jwt (auth0), BCrypt
- **Docs**: springdoc-openapi (Swagger UI) on dev profile
- **Onixbyte internal libs**: version-catalogue, tuple, common-toolbox, math-toolbox, identity-generator, captcha, regions
- **AWS**: S3 SDK
### Profiles ### Commands
- `dev`: Enables Swagger UI, connects to dev DB/Redis at `dfguide.onixbyte.cn`. Config in `config/application-dev.yaml`. ```bash
- Default profile: Used for production, no Swagger, connects to production datasource. cd web
pnpm install # Install dependencies (pnpm required)
pnpm dev # Start Vite dev server
pnpm build # TypeScript check + Vite production build
pnpm build:tar # Build + tar.gz archive (used by CI)
pnpm preview # Preview production build locally
pnpm lint # ESLint
```
No test suite exists in this project.
### Architecture
Chinese-language SPA for browsing and managing Ahsarah Guide (阿萨拉向导). The frontend talks to the Spring Boot backend via REST APIs.
**App shell** (`src/main.tsx`): React 19 + React Router 7 + Redux Toolkit + Ant Design 6 + Tailwind CSS 4. Wraps the router in Redux `Provider` → `PersistGate` (Redux Persist) → Ant Design `StyleProvider`/`ConfigProvider` (locale `zh_CN`).
**Routing** (`src/router/index.tsx`): Two layout groups:
- `HeroLayout` (nav header + footer) for `/`, `/firearms`, `/mod-codes`
- `EmptyLayout` (minimal) for `/login`
All page components are lazy-loaded via `createBrowserRouter` + `lazy()`.
**State** (`src/store/`): Redux Toolkit with two slices — `auth` (current user) and `firearms` (paginated firearm list). State is persisted to `localStorage` or `sessionStorage` based on the `VITE_REDUX_STORAGE` env var. Use typed hooks from `src/hooks/store.ts` (`useAppDispatch`, `useAppSelector`).
**API layer** (`src/api/`): Axios instance (`src/shared/web-client/`) with base URL from `VITE_API_BASE_URL`, 10s timeout, and credentials. API modules: `FirearmApi`, `ModificationApi`, `TagApi`, `AuthApi`.
**Pages**:
- `FirearmsPage` — paginated card grid with type filter, create/edit modals (admin-only), delete with popconfirm
- `ModCodesPage` — paginated list with tag multi-select and firearmId query param filter, create/edit modals with nested accessory/tuning form lists
- `LoginPage` — simple username/password form, dispatches `setCurrentUser` on success
**Shared form components**: `FirearmForm` and `ModificationForm` are reused by both create and edit modals. `ModificationForm` fetches all firearms for its weapon selector and supports a `lockFirearmId` prop that disables the selector (used when navigating from a specific firearm).
**Type system** (`src/types/`): `Firearm` with weapon stats, `Modification` with nested `Accessory[]` → `Tuning[]`, `Page<T>` for paginated API responses, `User` for auth.
**Vite config**: Alias `@` → `./src`. Plugins: React, Tailwind CSS 4, port checker. Build uses rolldown with manual chunk splitting for React, Redux, Ant Design, React Router, and rc-* packages.
**Styling**: Tailwind CSS 4 with CSS layers (`theme, base, antd, components, utilities`). Responsive grid for mod code cards (1→2→3→4 columns). Prettier: 100 print width, no semicolons, double quotes, trailing commas ES5.
### Environment variables
```
VITE_API_BASE_URL=/api # Backend API base URL
VITE_REDUX_STORAGE=local # "local" or "session" for Redux persistence
```
### Contributing conventions
- User-facing copy, documentation, and code comments in British English
- Commit messages use `chore:` prefix for dependency updates (per Dependabot config)
View File
File renamed without changes.
+38
View File
@@ -0,0 +1,38 @@
# Ahsarah Guide (阿萨拉向导)
Ahsarah Guide is a full-stack web application for browsing and managing firearm modification guides.
## Monorepo Structure
| Directory | Stack | Description |
|-----------|-------|-------------|
| `server/` | Java 21 + Spring Boot 3.5 + Gradle | REST API backend |
| `web/` | React 19 + Vite 8 + TypeScript + Ant Design 6 | Web frontend |
## Quick Start
### Server
Prerequisites: JDK 21 (Amazon Corretto), PostgreSQL, Redis
```bash
cd server
cp config/application-prod.yaml.example config/application-dev.yaml
# Edit config/application-dev.yaml with your database and Redis credentials
./gradlew bootJar
java -jar build/libs/ahsarah-guide-server-*.jar
```
### Web
Prerequisites: Node.js 20+, pnpm
```bash
cd web
pnpm install
pnpm dev
```
## Licence
MIT. See [LICENCE](LICENCE) for details.
-162
View File
@@ -1,162 +0,0 @@
### macOS
# General
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### Linux
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# Metadata left by Dolphin file manager, which comes with KDE Plasma
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# Log files created by default by the nohup command
nohup.out
### Windows
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
### JetBrains IDE
# Covers JetBrains IDEs: IntelliJ, GoLand, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea
# Gradle and Maven with auto-import
*.iml
*.ipr
# File-based project format
*.iws
# IntelliJ
out/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based HTTP Client
http-client.private.env.json
### Server
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
*.jar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
# Config
config/*.yml
config/*.yaml
config/*.properties
# Tests
test/
### Gradle
.gradle
**/build/
!**/src/**/build/
!gradle/
!gradle/wrapper
!gradle/wrapper/gradle-wrapper.jar
!gradle/wrapper/gradle-wrapper.properties
gradle-app.setting
.gradletasknamecache
### Claude Code
.claude/settings.local.json
.claude/memory/
.claude/plans/
.claude/worktrees/
.claude/scheduled_tasks.json
# Eclipse Gradle plugin generated files
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath
gradle.properties
# frp config
frpc.toml
+1 -1
View File
@@ -6,5 +6,5 @@ RUN chmod +x ./gradlew && \
FROM amazoncorretto:21-alpine AS runner FROM amazoncorretto:21-alpine AS runner
WORKDIR /app WORKDIR /app
COPY --from=builder /app/build/libs/delta-force-guide-server-1.0.0.jar app.jar COPY --from=builder /app/build/libs/ahsarah-guide-server-*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"] ENTRYPOINT ["java", "-jar", "app.jar"]
+3 -3
View File
@@ -8,11 +8,11 @@ ARG BUILD_DATE
COPY ${JAR_FILE} app.jar COPY ${JAR_FILE} app.jar
LABEL org.opencontainers.image.title="delta-force-guide-server" \ LABEL org.opencontainers.image.title="ahsarah-guide-server" \
org.opencontainers.image.description="REST API backend for managing Delta Force game firearm builds and modifications" \ org.opencontainers.image.description="REST API backend for Ahsarah Guide" \
org.opencontainers.image.version="${IMAGE_VERSION}" \ org.opencontainers.image.version="${IMAGE_VERSION}" \
org.opencontainers.image.vendor="${IMAGE_VENDOR}" \ org.opencontainers.image.vendor="${IMAGE_VENDOR}" \
org.opencontainers.image.source="https://git.onixbyte.com/onixbyte/delta-force-guide-server" \ org.opencontainers.image.source="https://onixbyte.dev/onixbyte/ahsarah-guide" \
org.opencontainers.image.licenses="MIT" \ org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.created="${BUILD_DATE}" org.opencontainers.image.created="${BUILD_DATE}"
-150
View File
@@ -1,150 +0,0 @@
# Delta Force Guide Server
REST API backend for managing **Delta Force** game firearm builds and modifications. Provides endpoints to browse, create, and share weapon configurations including attachments, tuning setups, tags, and build reviews.
## Tech Stack
| Layer | Technology |
|-----------|------------------------------------------------------------|
| Language | Java 21 (Amazon Corretto) |
| Framework | Spring Boot 3.x (Web, Security, Data JPA, Cache, Actuator) |
| Build | Gradle (Kotlin DSL) |
| Database | PostgreSQL (Flyway migrations, JSONB columns) |
| Cache | Redis (2-hour TTL) |
| Auth | Custom JWT via httpOnly cookies + BCrypt |
| API Docs | springdoc-openapi (Swagger UI, dev profile only) |
| Container | Multi-stage Docker image (Amazon Corretto 21 → Alpine) |
| CI/CD | GitHub Actions — builds on release publish |
## Quick Start
### Prerequisites
- JDK 21 (Amazon Corretto recommended)
- PostgreSQL
- Redis
### Configure
Copy and customise the development config:
```bash
cp config/application-prod.yaml.example \
config/application-dev.yaml
```
Fill in your datasource and Redis connection details, then place the production config at `config/`, then enable it by environment variable `SPRING_PROFILES_ACTIVE`.
### Build
```bash
# Compile (skip tests)
./gradlew build -x test
# Run all tests
./gradlew test
# Build executable JAR
./gradlew bootJar
```
### Run
```bash
SPRING_PROFILES_ACTIVE=prod java -jar build/libs/delta-force-guide-server-$version.jar
```
Swagger UI is available at `http://localhost:8080/swagger-ui.html` when the `dev` profile is active.
## Data Model
- **Firearm** — weapon base stats (name, type, level, calibre, fire rate, armour/body damage, review)
- **Modification** — a build attached to a firearm, with name, code, tags (JSONB), accessories including nested tuning objects (JSONB), author notes, and video links
- **App User** — registered user (username, email) with hashed credentials via BCrypt
Tags and accessories are stored as PostgreSQL JSONB columns using [Hypersistence Utils](https://github.com/vladmihalcea/hypersistence-utils), enabling flexible per-build metadata and filtering with the `@>` operator.
## Architecture
```
Controller → Service → Manager → Repository / Mapper
(HTTP) (logic) (@Transactional) (data access)
```
The call chain is strictly enforced — skipping layers is not permitted. All request/response objects are Java records with static `from()` factory methods for entity-to-DTO conversion.
## Docker
```bash
# Build image
docker pull registry.onixbyte.cn/onixbyte/delta-force-guide-server:latest
# Run container
docker run -p 8080:8080 \
-v /path/to/config:/app/config \
-e SPRING_PROFILES_ACTIVE=$your_active_profiles
delta-force-guide-server
```
Pre-built images are published to **Self-hosted GitLab Container Registry** (`registry.onixbyte.cn/onixbyte/delta-force-guide-server`) on every release.
## CI/CD
GitLab CI triggers on **tags**. The pipeline:
1. Builds the boot JAR with the release tag as the version
2. Uploads the JAR as a release asset
3. Builds and pushes a multi-arch Docker image to GHCR tagged with both `:latest` and `:<version>`
No tests are run in CI by design — tests are expected to pass locally before a release is cut.
## Profiles
| Profile | Purpose |
|---------|-----------------------------------------------------------------------|
| `dev` | Enables Swagger UI, connects to dev DB/Redis at `dfguide.onixbyte.cn` |
| default | Production mode, no Swagger, uses production datasource |
## Project Structure
```
src/main/java/com/onixbyte/deltaforceguide/
├── client/ External service HTTP clients
├── config/ Spring bean definitions (Security, CORS, Cache, Jackson, MyBatis)
├── controller/ REST controllers
├── domain/
│ ├── converter/ JPA attribute converters
│ ├── dto/ Request/response records
│ └── entity/ JPA entities
├── enumeration/ Enums (FirearmType)
├── exception/ Custom BizException with HTTP status mapping
├── filter/ TokenAuthenticationFilter (JWT through OncePerRequestFilter)
├── manager/ @Transactional wrappers around repositories
├── mapper/ MyBatis mapper interfaces (reserved for future use)
├── properties/ @ConfigurationProperties records
├── repository/ Spring Data JPA repositories
├── security/
│ ├── authentication/ Custom UsernamePasswordAuthentication
│ └── provider/ UsernamePasswordAuthenticationProvider
├── service/ Business logic
├── shared/ Constants and utility classes
└── utils/ General-purpose helpers
```
## Versioning
The application exposes its version at `/versions` (GET).
## Licence
This project is licensed under the [MIT Licence](LICENCE). Copyright &copy; 2026 OnixByte.
+1 -1
View File
@@ -8,7 +8,7 @@ val artefactVersion: String by project
val buildChannel: String by project val buildChannel: String by project
val vendor: String by project val vendor: String by project
group = "com.onixbyte.helix" group = "com.onixbyte.ahsarahguide"
version = artefactVersion version = artefactVersion
tasks.withType<JavaCompile> { tasks.withType<JavaCompile> {
+1 -1
View File
@@ -95,7 +95,7 @@ app:
max-age: PT2H max-age: PT2H
jwt: jwt:
# Issuer identifier, domain name is recommended. # Issuer identifier, domain name is recommended.
issuer: dfguide.local issuer: ahsarah-guide.local
# Token signing secret, a 32-byte long or longer string is recommended. # Token signing secret, a 32-byte long or longer string is recommended.
secret: qwertyuiopasdfghjklzxcvbnm123456 secret: qwertyuiopasdfghjklzxcvbnm123456
+1 -1
View File
@@ -11,4 +11,4 @@ dependencyResolutionManagement {
} }
} }
rootProject.name = "delta-force-guide-server" rootProject.name = "ahsarah-guide-server"
@@ -1,20 +1,20 @@
package com.onixbyte.deltaforceguide; package com.onixbyte.ahsarahguide;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
/** /**
* Entry point for the Delta Force Guide Server application. * Entry point for the Ahsarah Guide Server application.
* *
* @author zihluwang * @author zihluwang
*/ */
@EnableAsync @EnableAsync
@SpringBootApplication @SpringBootApplication
public class DeltaForceGuideApplication { public class AhsarahGuideApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(DeltaForceGuideApplication.class, args); SpringApplication.run(AhsarahGuideApplication.class, args);
} }
} }
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.client; package com.onixbyte.ahsarahguide.client;
import jakarta.mail.MessagingException; import jakarta.mail.MessagingException;
import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.InternetAddress;
@@ -1,12 +1,12 @@
package com.onixbyte.deltaforceguide.client; package com.onixbyte.ahsarahguide.client;
import com.auth0.jwt.JWT; import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.DecodedJWT;
import com.onixbyte.deltaforceguide.domain.entity.User; import com.onixbyte.ahsarahguide.domain.entity.User;
import com.onixbyte.deltaforceguide.properties.TokenProperties; import com.onixbyte.ahsarahguide.properties.TokenProperties;
import com.onixbyte.deltaforceguide.utils.DateTimeUtil; import com.onixbyte.ahsarahguide.utils.DateTimeUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -1,9 +1,9 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.onixbyte.deltaforceguide.interceptor.GitHubWebhookInterceptor; import com.onixbyte.ahsarahguide.interceptor.GitHubWebhookInterceptor;
import com.onixbyte.deltaforceguide.interceptor.TrafficInterceptor; import com.onixbyte.ahsarahguide.interceptor.TrafficInterceptor;
import com.onixbyte.deltaforceguide.properties.AppProperties; import com.onixbyte.ahsarahguide.properties.AppProperties;
import com.onixbyte.deltaforceguide.security.resolver.CurrentUserArgumentResolver; import com.onixbyte.ahsarahguide.security.resolver.CurrentUserArgumentResolver;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.onixbyte.deltaforceguide.shared.JacksonRedisSerialiser; import com.onixbyte.ahsarahguide.shared.JacksonRedisSerialiser;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.onixbyte.deltaforceguide.properties.CorsProperties; import com.onixbyte.ahsarahguide.properties.CorsProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.onixbyte.captcha.text.TextProducer; import com.onixbyte.captcha.text.TextProducer;
import com.onixbyte.captcha.text.impl.DefaultTextProducer; import com.onixbyte.captcha.text.impl.DefaultTextProducer;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.onixbyte.deltaforceguide.filter.WebhookFilter; import com.onixbyte.ahsarahguide.filter.WebhookFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -1,7 +1,7 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import com.onixbyte.deltaforceguide.shared.JacksonModules; import com.onixbyte.ahsarahguide.shared.JacksonModules;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -9,7 +9,7 @@ import org.springframework.context.annotation.Configuration;
* @author zihluwang * @author zihluwang
*/ */
@Configuration @Configuration
@MapperScan(basePackages = {"com.onixbyte.deltaforceguide.mapper"}) @MapperScan(basePackages = {"com.onixbyte.ahsarahguide.mapper"})
public class MyBatisConfig { public class MyBatisConfig {
} }
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact; import io.swagger.v3.oas.annotations.info.Contact;
@@ -8,8 +8,8 @@ import org.springframework.context.annotation.Configuration;
@OpenAPIDefinition( @OpenAPIDefinition(
info = @Info( info = @Info(
title = "Delta Force Guide Server", title = "Ahsarah Guide Server",
description = "API for managing Delta Force game firearm builds", description = "API for Ahsarah Guide",
version = "1.4.0", version = "1.4.0",
contact = @Contact( contact = @Contact(
name = "Zihlu Wang", name = "Zihlu Wang",
@@ -17,7 +17,7 @@ import org.springframework.context.annotation.Configuration;
), ),
license = @License( license = @License(
name = "MIT", name = "MIT",
url = "https://onixbyte.dev/onixbyte/delta-force-guide-server/raw/branch/main/LICENCE" url = "https://onixbyte.dev/onixbyte/ahsarah-guide/raw/branch/main/LICENCE"
) )
) )
) )
@@ -1,14 +1,14 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.auth0.jwt.JWT; import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.algorithms.Algorithm;
import com.onixbyte.deltaforceguide.exeption.ForbiddenException; import com.onixbyte.ahsarahguide.exeption.ForbiddenException;
import com.onixbyte.deltaforceguide.exeption.UnauthorisedException; import com.onixbyte.ahsarahguide.exeption.UnauthorisedException;
import com.onixbyte.deltaforceguide.filter.TokenAuthenticationFilter; import com.onixbyte.ahsarahguide.filter.TokenAuthenticationFilter;
import com.onixbyte.deltaforceguide.properties.CookieProperties; import com.onixbyte.ahsarahguide.properties.CookieProperties;
import com.onixbyte.deltaforceguide.properties.TokenProperties; import com.onixbyte.ahsarahguide.properties.TokenProperties;
import com.onixbyte.deltaforceguide.security.provider.UsernamePasswordAuthenticationProvider; import com.onixbyte.ahsarahguide.security.provider.UsernamePasswordAuthenticationProvider;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@@ -9,7 +9,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
* @author zihluwang * @author zihluwang
*/ */
@Configuration @Configuration
@EnableJpaRepositories(basePackages = {"com.onixbyte.deltaforceguide.repository"}) @EnableJpaRepositories(basePackages = {"com.onixbyte.ahsarahguide.repository"})
public class SpringDataConfig { public class SpringDataConfig {
} }
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.config; package com.onixbyte.ahsarahguide.config;
import com.onixbyte.deltaforceguide.properties.GitHubWebhookProperties; import com.onixbyte.ahsarahguide.properties.GitHubWebhookProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -1,8 +1,8 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.ManageRoleRequest; import com.onixbyte.ahsarahguide.domain.dto.ManageRoleRequest;
import com.onixbyte.deltaforceguide.security.annotation.RequiresAuth; import com.onixbyte.ahsarahguide.security.annotation.RequiresAuth;
import com.onixbyte.deltaforceguide.service.UserService; import com.onixbyte.ahsarahguide.service.UserService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -1,8 +1,8 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.*; import com.onixbyte.ahsarahguide.domain.dto.*;
import com.onixbyte.deltaforceguide.security.annotation.RequiresAuth; import com.onixbyte.ahsarahguide.security.annotation.RequiresAuth;
import com.onixbyte.deltaforceguide.service.AuthService; import com.onixbyte.ahsarahguide.service.AuthService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
@@ -1,7 +1,7 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.DailyPasswordResponse; import com.onixbyte.ahsarahguide.domain.dto.DailyPasswordResponse;
import com.onixbyte.deltaforceguide.service.DailyPasswordService; import com.onixbyte.ahsarahguide.service.DailyPasswordService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@@ -1,11 +1,11 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.FirearmRequest; import com.onixbyte.ahsarahguide.domain.dto.FirearmRequest;
import com.onixbyte.deltaforceguide.domain.dto.FirearmResponse; import com.onixbyte.ahsarahguide.domain.dto.FirearmResponse;
import com.onixbyte.deltaforceguide.domain.dto.PageResponse; import com.onixbyte.ahsarahguide.domain.dto.PageResponse;
import com.onixbyte.deltaforceguide.enumeration.FirearmType; import com.onixbyte.ahsarahguide.enumeration.FirearmType;
import com.onixbyte.deltaforceguide.security.annotation.RequiresAuth; import com.onixbyte.ahsarahguide.security.annotation.RequiresAuth;
import com.onixbyte.deltaforceguide.service.FirearmService; import com.onixbyte.ahsarahguide.service.FirearmService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Max;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.ErrorResponse; import com.onixbyte.ahsarahguide.domain.dto.ErrorResponse;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
@@ -1,13 +1,13 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.ModificationBatchCreateRequest; import com.onixbyte.ahsarahguide.domain.dto.ModificationBatchCreateRequest;
import com.onixbyte.deltaforceguide.domain.dto.ModificationRequest; import com.onixbyte.ahsarahguide.domain.dto.ModificationRequest;
import com.onixbyte.deltaforceguide.domain.dto.ModificationResponse; import com.onixbyte.ahsarahguide.domain.dto.ModificationResponse;
import com.onixbyte.deltaforceguide.domain.dto.PageResponse; import com.onixbyte.ahsarahguide.domain.dto.PageResponse;
import com.onixbyte.deltaforceguide.domain.entity.User; import com.onixbyte.ahsarahguide.domain.entity.User;
import com.onixbyte.deltaforceguide.security.annotation.RequiresAuth; import com.onixbyte.ahsarahguide.security.annotation.RequiresAuth;
import com.onixbyte.deltaforceguide.security.resolver.CurrentUser; import com.onixbyte.ahsarahguide.security.resolver.CurrentUser;
import com.onixbyte.deltaforceguide.service.ModificationService; import com.onixbyte.ahsarahguide.service.ModificationService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.onixbyte.deltaforceguide.service.ModificationService; import com.onixbyte.ahsarahguide.service.ModificationService;
import java.util.List; import java.util.List;
@@ -1,14 +1,14 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.BuildSummaryResponse; import com.onixbyte.ahsarahguide.domain.dto.BuildSummaryResponse;
import com.onixbyte.deltaforceguide.domain.dto.ChangePasswordRequest; import com.onixbyte.ahsarahguide.domain.dto.ChangePasswordRequest;
import com.onixbyte.deltaforceguide.domain.dto.PageResponse; import com.onixbyte.ahsarahguide.domain.dto.PageResponse;
import com.onixbyte.deltaforceguide.domain.dto.UpdateProfileRequest; import com.onixbyte.ahsarahguide.domain.dto.UpdateProfileRequest;
import com.onixbyte.deltaforceguide.domain.dto.UserProfileResponse; import com.onixbyte.ahsarahguide.domain.dto.UserProfileResponse;
import com.onixbyte.deltaforceguide.domain.entity.User; import com.onixbyte.ahsarahguide.domain.entity.User;
import com.onixbyte.deltaforceguide.security.annotation.RequiresAuth; import com.onixbyte.ahsarahguide.security.annotation.RequiresAuth;
import com.onixbyte.deltaforceguide.security.resolver.CurrentUser; import com.onixbyte.ahsarahguide.security.resolver.CurrentUser;
import com.onixbyte.deltaforceguide.service.UserService; import com.onixbyte.ahsarahguide.service.UserService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.service.AppService; import com.onixbyte.ahsarahguide.service.AppService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@@ -1,8 +1,8 @@
package com.onixbyte.deltaforceguide.controller; package com.onixbyte.ahsarahguide.controller;
import com.onixbyte.deltaforceguide.domain.dto.GitHubIssueRequest; import com.onixbyte.ahsarahguide.domain.dto.GitHubIssueRequest;
import com.onixbyte.deltaforceguide.service.WebhookService; import com.onixbyte.ahsarahguide.service.WebhookService;
import com.onixbyte.deltaforceguide.shared.GitHubWebhookHeader; import com.onixbyte.ahsarahguide.shared.GitHubWebhookHeader;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.converter; package com.onixbyte.ahsarahguide.domain.converter;
import com.onixbyte.deltaforceguide.enumeration.FirearmType; import com.onixbyte.ahsarahguide.enumeration.FirearmType;
import jakarta.persistence.AttributeConverter; import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter; import jakarta.persistence.Converter;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.converter; package com.onixbyte.ahsarahguide.domain.converter;
import com.onixbyte.deltaforceguide.enumeration.ModificationStatus; import com.onixbyte.ahsarahguide.enumeration.ModificationStatus;
import jakarta.persistence.AttributeConverter; import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter; import jakarta.persistence.Converter;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.onixbyte.deltaforceguide.domain.entity.Accessory; import com.onixbyte.ahsarahguide.domain.entity.Accessory;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.Pattern;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
/** /**
* DTO representing a single daily-generated password for a map. * DTO representing a single daily-generated password for a map.
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
/** /**
* DTO holding metadata about the daily password source and update tracking. * DTO holding metadata about the daily password source and update tracking.
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
/** /**
* Response DTO wrapping daily password data with metadata. * Response DTO wrapping daily password data with metadata.
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
public record EmailVerificationCode( public record EmailVerificationCode(
String username, String username,
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
/** /**
* Standard error response body returned on API failures. * Standard error response body returned on API failures.
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.onixbyte.deltaforceguide.enumeration.FirearmType; import com.onixbyte.ahsarahguide.enumeration.FirearmType;
/** /**
* Request DTO for creating or updating a firearm. * Request DTO for creating or updating a firearm.
@@ -1,7 +1,7 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.onixbyte.deltaforceguide.domain.entity.Firearm; import com.onixbyte.ahsarahguide.domain.entity.Firearm;
import com.onixbyte.deltaforceguide.enumeration.FirearmType; import com.onixbyte.ahsarahguide.enumeration.FirearmType;
/** /**
* Response DTO for a firearm record, including associated modifications. * Response DTO for a firearm record, including associated modifications.
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.PropertyNamingStrategies;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.PropertyNamingStrategies;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.PropertyNamingStrategies;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.PropertyNamingStrategies;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.PropertyNamingStrategies;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.Positive;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.onixbyte.deltaforceguide.domain.entity.Modification; import com.onixbyte.ahsarahguide.domain.entity.Modification;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Email;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
public record SendVerificationCodeResponse( public record SendVerificationCodeResponse(
String verificationCodeId String verificationCodeId
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.onixbyte.deltaforceguide.domain.entity.Tuning; import com.onixbyte.ahsarahguide.domain.entity.Tuning;
/** /**
* Response DTO for a tuning adjustment on an accessory. * Response DTO for a tuning adjustment on an accessory.
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.onixbyte.deltaforceguide.domain.entity.User; import com.onixbyte.ahsarahguide.domain.entity.User;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.domain.dto; package com.onixbyte.ahsarahguide.domain.dto;
import com.onixbyte.deltaforceguide.domain.entity.User; import com.onixbyte.ahsarahguide.domain.entity.User;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -1,7 +1,7 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import com.onixbyte.deltaforceguide.domain.converter.FirearmTypeConverter; import com.onixbyte.ahsarahguide.domain.converter.FirearmTypeConverter;
import com.onixbyte.deltaforceguide.enumeration.FirearmType; import com.onixbyte.ahsarahguide.enumeration.FirearmType;
import jakarta.persistence.CascadeType; import jakarta.persistence.CascadeType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Convert; import jakarta.persistence.Convert;
@@ -1,7 +1,7 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import com.onixbyte.deltaforceguide.domain.converter.ModificationStatusConverter; import com.onixbyte.ahsarahguide.domain.converter.ModificationStatusConverter;
import com.onixbyte.deltaforceguide.enumeration.ModificationStatus; import com.onixbyte.ahsarahguide.enumeration.ModificationStatus;
import io.hypersistence.utils.hibernate.type.json.JsonType; import io.hypersistence.utils.hibernate.type.json.JsonType;
import jakarta.persistence.*; import jakarta.persistence.*;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import java.util.Objects; import java.util.Objects;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import jakarta.persistence.CascadeType; import jakarta.persistence.CascadeType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.AttributeOverride; import jakarta.persistence.AttributeOverride;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import jakarta.persistence.Embeddable; import jakarta.persistence.Embeddable;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.domain.entity; package com.onixbyte.ahsarahguide.domain.entity;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.enumeration; package com.onixbyte.ahsarahguide.enumeration;
/** /**
* Enumeration of firearm types in the Delta Force game. * Enumeration of firearm types in the Delta Force game.
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.enumeration; package com.onixbyte.ahsarahguide.enumeration;
import java.util.Arrays; import java.util.Arrays;
import java.util.Map; import java.util.Map;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.exeption; package com.onixbyte.ahsarahguide.exeption;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.exeption; package com.onixbyte.ahsarahguide.exeption;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.exeption; package com.onixbyte.ahsarahguide.exeption;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.exeption; package com.onixbyte.ahsarahguide.exeption;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.exeption; package com.onixbyte.ahsarahguide.exeption;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.exeption; package com.onixbyte.ahsarahguide.exeption;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
@@ -1,12 +1,12 @@
package com.onixbyte.deltaforceguide.filter; package com.onixbyte.ahsarahguide.filter;
import com.auth0.jwt.exceptions.JWTVerificationException; import com.auth0.jwt.exceptions.JWTVerificationException;
import com.onixbyte.deltaforceguide.client.TokenClient; import com.onixbyte.ahsarahguide.client.TokenClient;
import com.onixbyte.deltaforceguide.exeption.UnauthorisedException; import com.onixbyte.ahsarahguide.exeption.UnauthorisedException;
import com.onixbyte.deltaforceguide.manager.CookieManager; import com.onixbyte.ahsarahguide.manager.CookieManager;
import com.onixbyte.deltaforceguide.manager.UserManager; import com.onixbyte.ahsarahguide.manager.UserManager;
import com.onixbyte.deltaforceguide.manager.UserRoleManager; import com.onixbyte.ahsarahguide.manager.UserRoleManager;
import com.onixbyte.deltaforceguide.security.authentication.UsernamePasswordAuthentication; import com.onixbyte.ahsarahguide.security.authentication.UsernamePasswordAuthentication;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.filter; package com.onixbyte.ahsarahguide.filter;
import com.onixbyte.deltaforceguide.wrapper.RepeatedlyReadRequestWrapper; import com.onixbyte.ahsarahguide.wrapper.RepeatedlyReadRequestWrapper;
import jakarta.servlet.*; import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -1,11 +1,11 @@
package com.onixbyte.deltaforceguide.interceptor; package com.onixbyte.ahsarahguide.interceptor;
import com.onixbyte.crypto.util.CryptoUtil; import com.onixbyte.crypto.util.CryptoUtil;
import com.onixbyte.deltaforceguide.exeption.InternalServerErrorException; import com.onixbyte.ahsarahguide.exeption.InternalServerErrorException;
import com.onixbyte.deltaforceguide.exeption.UnauthorisedException; import com.onixbyte.ahsarahguide.exeption.UnauthorisedException;
import com.onixbyte.deltaforceguide.manager.WebhookManager; import com.onixbyte.ahsarahguide.manager.WebhookManager;
import com.onixbyte.deltaforceguide.shared.GitHubWebhookHeader; import com.onixbyte.ahsarahguide.shared.GitHubWebhookHeader;
import com.onixbyte.deltaforceguide.wrapper.RepeatedlyReadRequestWrapper; import com.onixbyte.ahsarahguide.wrapper.RepeatedlyReadRequestWrapper;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.jspecify.annotations.NonNull; import org.jspecify.annotations.NonNull;
@@ -1,4 +1,4 @@
package com.onixbyte.deltaforceguide.interceptor; package com.onixbyte.ahsarahguide.interceptor;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.onixbyte.deltaforceguide.properties.AppProperties; import com.onixbyte.ahsarahguide.properties.AppProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.onixbyte.deltaforceguide.properties.CookieProperties; import com.onixbyte.ahsarahguide.properties.CookieProperties;
import org.springframework.boot.web.server.Cookie; import org.springframework.boot.web.server.Cookie;
import org.springframework.http.ResponseCookie; import org.springframework.http.ResponseCookie;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -1,11 +1,11 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.onixbyte.deltaforceguide.domain.dto.DailyPasswordResponse; import com.onixbyte.ahsarahguide.domain.dto.DailyPasswordResponse;
import com.onixbyte.deltaforceguide.exeption.InternalServerErrorException; import com.onixbyte.ahsarahguide.exeption.InternalServerErrorException;
import com.onixbyte.deltaforceguide.shared.JacksonModules; import com.onixbyte.ahsarahguide.shared.JacksonModules;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
@@ -1,16 +1,16 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.onixbyte.deltaforceguide.domain.entity.Accessory; import com.onixbyte.ahsarahguide.domain.entity.Accessory;
import com.onixbyte.deltaforceguide.domain.entity.Firearm; import com.onixbyte.ahsarahguide.domain.entity.Firearm;
import com.onixbyte.deltaforceguide.domain.entity.Modification; import com.onixbyte.ahsarahguide.domain.entity.Modification;
import com.onixbyte.deltaforceguide.domain.entity.Tuning; import com.onixbyte.ahsarahguide.domain.entity.Tuning;
import com.onixbyte.deltaforceguide.domain.entity.User; import com.onixbyte.ahsarahguide.domain.entity.User;
import com.onixbyte.deltaforceguide.domain.dto.AccessoryRequest; import com.onixbyte.ahsarahguide.domain.dto.AccessoryRequest;
import com.onixbyte.deltaforceguide.domain.dto.ModificationRequest; import com.onixbyte.ahsarahguide.domain.dto.ModificationRequest;
import com.onixbyte.deltaforceguide.domain.dto.ModificationResponse; import com.onixbyte.ahsarahguide.domain.dto.ModificationResponse;
import com.onixbyte.deltaforceguide.domain.dto.TuningRequest; import com.onixbyte.ahsarahguide.domain.dto.TuningRequest;
import com.onixbyte.deltaforceguide.repository.FirearmRepository; import com.onixbyte.ahsarahguide.repository.FirearmRepository;
import com.onixbyte.deltaforceguide.repository.ModificationRepository; import com.onixbyte.ahsarahguide.repository.ModificationRepository;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
@@ -1,7 +1,7 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.onixbyte.deltaforceguide.domain.entity.UserCredential; import com.onixbyte.ahsarahguide.domain.entity.UserCredential;
import com.onixbyte.deltaforceguide.repository.UserCredentialRepository; import com.onixbyte.ahsarahguide.repository.UserCredentialRepository;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@@ -1,9 +1,9 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.onixbyte.deltaforceguide.domain.entity.User; import com.onixbyte.ahsarahguide.domain.entity.User;
import com.onixbyte.deltaforceguide.domain.entity.UserRole; import com.onixbyte.ahsarahguide.domain.entity.UserRole;
import com.onixbyte.deltaforceguide.repository.UserRepository; import com.onixbyte.ahsarahguide.repository.UserRepository;
import com.onixbyte.deltaforceguide.repository.UserRoleRepository; import com.onixbyte.ahsarahguide.repository.UserRoleRepository;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -1,7 +1,7 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.onixbyte.deltaforceguide.domain.entity.UserRole; import com.onixbyte.ahsarahguide.domain.entity.UserRole;
import com.onixbyte.deltaforceguide.repository.UserRoleRepository; import com.onixbyte.ahsarahguide.repository.UserRoleRepository;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@@ -1,6 +1,6 @@
package com.onixbyte.deltaforceguide.manager; package com.onixbyte.ahsarahguide.manager;
import com.onixbyte.deltaforceguide.properties.GitHubWebhookProperties; import com.onixbyte.ahsarahguide.properties.GitHubWebhookProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
Loaded 100 of 144 files, more files were not shown because too many files have changed in this diff. Show more