Skip to content

Release 1.25#125

Merged
NikodemCyrzan merged 17 commits intomainfrom
release/1.25
Dec 21, 2025
Merged

Release 1.25#125
NikodemCyrzan merged 17 commits intomainfrom
release/1.25

Conversation

@NikodemCyrzan
Copy link
Copy Markdown
Collaborator

No description provided.

NikodemCyrzan and others added 2 commits December 18, 2025 22:13
* Add UI Toolkit components

* feat: add progress bar component to ui-toolkit

* feat: add varible color to progress bar component

* feat: add button component to ui-toolkit

* feat: add timestamp date component to ui-toolkit

* feat: add timestamp date component to ui-toolkit

* Refactor member role association creation meta types

Split MemberRoleAssociationCreationMeta into specific meta classes for organization, project, and channel scopes. Updated MemberRoleAssociation to use MemberRoleOrganizationAssociationCreationMeta and set scope in meta. Added scope enum to MemberRoleAssociationMeta for better type safety and clarity.

* Refactor member role associations to unified MemberAssociation

Replaces MemberRoleAssociation and related services with a unified MemberAssociation model and service, supporting organization, project, and channel scopes. Updates domain models, repositories, and service logic to use MemberAssociation, adds meta classes for association creation/deletion, and introduces super privileged role logic. Cleans up redundant code and improves consistency in role assignment and retrieval across scopes.

* Add initial creation meta for projects and channels

Introduces ProjectInitialCreationMeta and ChannelInitialCreationMeta classes to support structured creation of projects and channels. Refactors Project and Channel domain models to use meta objects for name, description, and color. Updates InitialSetupUseCase to create an initial project and channels during setup, and assigns roles accordingly. Also adds support for optional initial project configuration in InitialSetupCommand.

* Add session context and JWT authentication support

Introduces SessionContext for request-scoped session data and JWTService for token validation and account extraction. Adds SessionContextInterceptor to populate session context from JWT and organization headers. Updates MemberService and RoleService with new query methods, and expands project command/usecase scaffolding. Updates Maven dependencies to support JWT and web features.

* Implement project and channel access control services

Added AccessControlService and TaskService for managing access and tasks. Refactored service methods for consistent naming (getOrThrow), batch retrieval, and creation/deletion of projects and channels. Enhanced MemberAssociationService with filtering and access validation methods. Introduced ProjectDefaultCreationMeta and ProjectDefaultDeletionMeta. Updated use cases and commands to support new access control and batch operations. Improved repository interfaces for batch queries.

* Refactor access control and member association services

Refactored AccessControlService to centralize and clarify access checks for organizations, projects, and channels, introducing AccessDeniedException for clearer error handling. MemberService, ChannelService, and MemberAssociationService were updated to use organization context and more consistent method naming. Deprecated or commented legacy methods in MemberAssociationService, and added new methods for retrieving and managing member associations by scope and organization.

* Enforce entity state checks in domain modifiers

Added ensureNotCreated, ensureNotDeleted, ensureCreated, and meta validation checks to create, modify, and delete methods across all domain entities. Updated modifier interfaces to support generic meta types and improved error handling for unsupported meta types. This change ensures consistent entity state validation and error reporting throughout the domain model.

* Extract shared code to new shared module

Moved common classes from API, application, and domain modules to a new blacknode-software-backend-shared module. Updated dependencies and imports across modules to use the shared code. Refactored service constructors and method signatures for consistency with new shared types.

* Update ProjectsInOrganizationFetchUseCase.java

* Implement project creation endpoint and converters

Added ProjectCreateRequestConverter and ProjectCreateResponseConverter to handle conversion between API and application layers. Updated ProjectController to implement the project creation endpoint using these converters and the ProjectCreateUseCase. Modified ProjectCreateRequest and ProjectCreateResponse to support new fields and builder patterns. Refactored related classes for consistency and immutability.

* Add infrastructure repository implementations and error response

Introduced initial (stub) implementations for repository interfaces in the infrastructure layer for account, auth, channel, member, member association, organization, project, resource, role, task, and view. Added ErrorResponse class and improved OpenAPI documentation for error responses in ProjectController. Removed JWTService and commented out its usage in SessionContextInterceptor. Updated POM files to manage springdoc-openapi dependency centrally and added it to shared module. Minor improvements to BaseResponse for OpenAPI schema annotations.

* Add project patching and response enhancements

Introduces patch support for projects, including new request/response models, converters, and use cases. Refactors controller endpoints to use new annotations for error handling and organization headers. Updates shared response and converter interfaces for improved type safety and builder support. Adds base patch operation abstractions and enums for extensible patching.

* Refactor project response and patch handling

Refactored project response classes to use a new ProjectResponseContent base, updated response and converter implementations, and improved patch handling for projects. Introduced modification meta classes for project name, description, and color, and updated the patch use case and service logic to support these. Removed old response base classes, updated controller endpoints, and improved consistency across API response models.

* Add batch fetch for projects and update OpenAPI metadata

Introduces batch fetch endpoints and converters for projects, including ProjectsBatchFetchRequest, ProjectsBatchFetchRequestConverter, and ProjectsBatchFetchResponseConverter. Renames ProjectListResponse to ProjectsListResponse and updates related usages. Adds @hidden annotation to several controllers to hide them from OpenAPI documentation. Updates OpenAPI definition with contact information.

* Add Docker and Nginx setup for local development

Introduces a Dockerfile for building and running the backend API, a docker-compose file for orchestrating backend and nginx services, and an nginx configuration to proxy API and frontend requests. This setup streamlines local development and testing with containerized services.

* Update Dockerfile

* Update Dockerfile

* Refactor hinz-common dependency and imports

Replaced all usages of 'me.hinsinger.projects.hinz.common.huid.HUID' and related imports with 'me.hinsinger.hinz.common.huid.HUID' across the codebase. Updated Maven dependencies to use '${hinz-common.groupId}' for hinz-common, improving consistency and maintainability.

* Switch nginx service to custom Docker build

Replaces the nginx image in local-docker-compose.yml with a custom build using a new proxy/Dockerfile. The Dockerfile copies the nginx.conf into the image, simplifying the compose configuration and improving portability.

* Update local-docker-compose.yml

* Comment out frontend proxy location in nginx.conf

The location block that proxies all other requests to the frontend has been commented out. This may be for debugging, maintenance, or to temporarily disable frontend proxying.

* Update nginx.conf

* Update nginx.conf

* Add Spring Boot config and update Nginx API proxy

Added application.yml for backend API with context path, Swagger, and actuator settings. Updated nginx.conf to simplify API proxying by removing rewrite and adjusting proxy_pass to match new backend context path.

* Update local-docker-compose.yml

* Update nginx.conf

* Add OpenAPI configuration with server URLs

Introduces OpenApiConfig to define OpenAPI documentation servers for testing and production environments using Spring configuration.

* Update SetupController.java

* Update SetupController.java

* Update OpenAPI server URLs to include /api path

Modified the server URLs in OpenApiConfig to append '/api' for both testing and production environments. This ensures the OpenAPI documentation reflects the correct base path for API endpoints.

* Update hinz-common dependency and repository

Changed hinz-common groupId and version to use the official release (1.0.0) from the hinsinger Maven repository, replacing the previous GitHub-based version and JitPack repository.

* Update default HUIDs for core domain entities

Changed the default HUID values for AuthType, Organization, and TaskStatus entities to new, non-zero-based UUIDs.

* Add project entity and versioning infrastructure

Introduced ProjectEntity, ProjectMetaEntity, and ProjectEntityRepository for project persistence. Added shared versioning interfaces and annotations (VersionableEntity, VersionedEntity, MigrationEntity) to support entity versioning and migration. Updated pom.xml to include Spring Data JPA and H2 dependencies.

* Add versioned entity migration and integration support

Introduces infrastructure for versioned entities, including migration logic, JSON converters, Hibernate post-load listeners, and integration tests. Adds @VersionedEntity annotation, migrator classes, and updates ProjectMetaEntity to support versioning and migration. Dependency updates and configuration for Spring Boot and JPA are included to support new features.

* Add custom Hibernate type for versioned entities

Introduces @versioned annotation and VersionedEntityJavaType for handling versioned entities as custom Hibernate types. Updates serialization/deserialization logic to include entity type information in JSON, refactors configuration to initialize the custom type, and adapts tests and converters to use the new annotation and type-aware migration.

* Remove @versioned annotation and update usages

Deleted the obsolete @versioned annotation and replaced its usage with @VersionedEntity in all relevant classes and tests. Added documentation to @VersionedEntity and cleaned up imports in test files. Also removed an unused migration test and improved import organization.

* Add migration test for V1 versioned entity

Introduces a new integration test to verify migration logic from V1 versioned entity data. The test inserts legacy JSON data into the database and asserts that it is correctly migrated when loaded.

* Remove unused ObjectMapper bean from test config

Eliminated the ObjectMapper bean and its injection from VersionedEntityIntegrationTest as it is no longer used. This streamlines the test configuration and reduces unnecessary dependencies.

* Add ObjectMapper bean to test configuration

Introduced an ObjectMapper bean in the test configuration and injected it into VersionedEntityIntegrationTest. This supports JSON serialization needs in integration tests.

* Refactor entity modifier structure and add project infra

Moved modifier interfaces and meta classes under a new entity.modifier package, updating all imports and usages across domain and application layers. Added ProjectEntityMapper, OrganizationRelatedEntity, and refactored ProjectEntity and ProjectRepositoryImpl for improved infrastructure mapping and repository implementation. Updated Project to implement DomainEntity and use builder/all-args-constructor. Cleaned up and renamed ProjectEntityRepository for consistency.

* Refactor ProjectEntity date fields to use Instant type

Changed ProjectEntity's createdAt, modifiedAt, and deletedAt fields from LocalDate to Instant for improved timestamp precision. Updated ProjectEntityMapper to handle conversion between Instant and Timestamp, and added utility methods for UUID/HUID and Instant/Timestamp conversions in EntityMapper. Minor nginx.conf comment update.

* Refactor versioning logic and update migration entities

Removed static versioning methods from VersionableEntity interface to simplify its responsibilities. Updated MyVersionedObject test class to introduce a new migration version (V002) and adjusted migration logic accordingly. Added @transactional annotation to InitialSetupUseCase.execute to ensure transactional integrity.

* Fix ProjectEntityMapper to map timestamps and IDs correctly

Moved timestamp mapping in toDomain method for clarity. Updated toEntity method to map createdAt, modifiedAt, and deletedAt fields, and to use IDs directly instead of converting to UUID. This ensures proper mapping between domain and infrastructure entities.

* Add getEntityState method to EntityMapper interface

Introduces a default getEntityState method in EntityMapper to determine the state of a domain entity based on its type and timestamps. Also adds related imports and a placeholder for state handling in ProjectEntityMapper.

---------

Co-authored-by: scraft official <63715927+scraft-official@users.noreply.github.com>
Added scripts for generating Gource project visualizations in both Windows (.bat) and Unix (.sh) environments. Included background and logo images required for the visuals, and updated .gitignore to exclude generated .mp4 files.
Matcher m = VERSION_PATTERN.matcher(type.getSimpleName());
if (!m.matches())
throw new IllegalStateException("Invalid migrator name: " + type);
return Integer.parseInt(m.group(1));
}

@Getter
@Builder
* Refactor deletion logic and update entity state handling

Moved Deletable and DeletionMeta interfaces to 'impl/delete' package and updated all references. Renamed 'deletationTimestamp' to 'deletionTimestamp' across domain entities and mappers for consistency. Improved entity state handling in EntityMapper to support NOT_DEFINED, ACTIVE, and DELETED states. Refactored ProjectRepositoryImpl to use OrganizationRelatedEntityRepository and updated repository package structure. Added default state initialization in BaseEntity.

* Implement organization-aware project queries

Updated ProjectRepositoryImpl and ProjectEntityRepository to support fetching projects by organization and active state. Replaced previous methods with queries that ensure projects belong to the specified organization and are active, and implemented missing methods for retrieving and saving projects within an organization context.

* Refactor entity mapping and repository to use UUID keys

Updated entity classes to use field access and protected fields for IDs and organization IDs. Changed ProjectEntityRepository to use UUID as the primary key type instead of HUID. Added @EnableJpaRepositories and @EntityScan to ApiApplication for proper JPA configuration. Removed unused imports and improved entity annotations for consistency.

* Add NoArgsConstructor and update repository queries

Added @NoArgsConstructor to BaseEntity, OrganizationRelatedEntity, and ProjectEntity for improved JPA compatibility. Replaced method name-based queries with explicit @query annotations in ProjectEntityRepository and updated usages in ProjectRepositoryImpl to match new method names.

@Getter
@Entity
@SuperBuilder
* Refactor project mapping to use MapStruct and annotations

Replaces manual mapping logic for project entities and API responses with MapStruct-based mappers and custom mapping annotations. Introduces new mapper interfaces, annotation classes, and shared mapping utilities to streamline conversion between domain, infrastructure, and API layers. Updates Maven build configuration to support MapStruct and annotation processing.

* Refactor project converters to mappers using MapStruct

Replaces manual converter classes in the project controller with MapStruct-based mappers for request and response mapping. Removes old converter classes and introduces new mapper interfaces and implementations, improving maintainability and consistency. Updates controller and related annotations to use the new mappers, and adds utility mapping annotations and methods for batch and patch operations.
@ApiResponses(value = { @ApiResponse(responseCode = "201", description = "Project created") })
@InvalidInputResponse
@PostMapping("/projects")
public ResponseEntity<ProjectCreateResponse> createProject(@PathVariable UUID organizationId,
import software.blacknode.backend.domain.project.meta.modify.ProjectNameModificationMeta;

public class Project implements Creatable, Modifiable, Deletable {
@Builder //(access = lombok.AccessLevel.PACKAGE)
* Refactor project mappers and update dependencies

Replaced ProjectsListMapper with ProjectsInOrganizationFetchMapper and updated related controller usage. Improved ProjectResponseContentMapping to use nested meta fields. Renamed fields in BatchRequest and ControllerMapper for consistency. Added MapStruct and related annotation processor dependencies to pom.xml.

* Add organization fetch command and use case

Introduces OrganizationFetchCommand and OrganizationFetchUseCase to enable fetching organization details with access control checks. The use case retrieves the organization for the current session and ensures the member has read access.

* Add @service annotation to OrganizationFetchUseCase

Annotated OrganizationFetchUseCase with @service to enable Spring component scanning and dependency injection. Also removed an unused import from OrganizationFetchCommand.

* Add organization patch use case and name modification meta

Introduces OrganizationPatchCommand and OrganizationPatchUseCase to support patching organization entities, specifically enabling name updates. Adds OrganizationNameModificationMeta for encapsulating name changes and extends OrganizationService to handle modification operations. Updates Organization domain class with relevant TODOs for future improvements.
}

@Getter
@Builder


@Getter
@Builder
NikodemCyrzan and others added 5 commits December 20, 2025 11:56
* feat: add expandable channels

* feat: add search header and main header styles

* cleanup: remove console.log
Refactored Organization to store its name in OrganizationMeta instead of directly in Organization. Added validation and builder support for the name field in OrganizationMeta. Updated creation and modification logic to use OrganizationMeta for name management.
* Add organization infrastructure entities and refactor project mapping

Introduces infrastructure layer entities, mappers, and repositories for organizations, including OrganizationEntity, OrganizationEntityMeta, OrganizationEntitySettings, and OrganizationEntityRepository. Refactors OrganizationRepositoryImpl to use the new infrastructure entities and mapping. Updates ProjectEntity and related mappers to align with new naming conventions and structure, and moves ProjectEntityMapper to the correct package. Cleans up and aligns domain and infrastructure layers for both organization and project modules.

* Remove Organization settings field from domain and entity

Commented out the OrganizationSettings field in the Organization domain model and OrganizationEntity infrastructure class. This change prepares for refactoring or removal of organization settings handling.

* Add integration test and MapStruct support for ProjectPatchMapper

Added spring-boot-starter-test dependency and a basic integration test to verify application context loading. Annotated ProjectPatchMapper with @Mapper(componentModel = "spring") to enable MapStruct integration with Spring.
public static final HUID DEFAULT_ORGANIZATION_ID = HUID.fromString("00000000-0000-0000-0000-000000000000");
import software.blacknode.backend.domain.organization.meta.modify.OrganizationNameModificationMeta;

@Builder

@Getter
@Entity
@SuperBuilder
* Refactor organization and project mappers and responses

Refactored organization and project response models to use content classes and unified mapping logic. Introduced OrganizationMapper, OrganizationFetchMapper, and OrganizationResponseContent. Removed OrganizationSettingsResponse and related controller endpoint. Updated batch response to use lists instead of maps. Added a shared BaseMapper interface for common mapping logic and updated relevant mappers to extend it.

* Add mappers and comprehensive tests for organization and project controllers

Introduces OrganizationPatchMapper and annotates OrganizationFetchMapper with @Mapper for MapStruct integration. Adds default HUID-to-UUID mapping methods in OrganizationMapper and ProjectMapper. Updates ProjectsBatchMapper mapping for projectIds. Fixes OrganizationPatchResponse generic type. Adds extensive unit tests for all mappers, including edge cases and field mapping validation for organization and project controller layers.

* Refactor mappers to remove HUID-UUID conversions

Removed HUID to UUID conversion methods from ControllerMapper and related default mapping methods from OrganizationMapper and ProjectMapper. Updated project and organization entity mappers to add direct meta mapping methods. Cleaned up redundant MapStruct @mapping annotations and simplified mapping logic for project and organization mappers.

* Refactor organization controller endpoints

Updated OrganizationController to use dependency injection, new mappers, and use cases for fetching and patching organization details. Simplified endpoint paths, removed unused methods, and added support for mapping requests and responses. Added builder pattern to OrganizationFetchCommand.
void testToResponse_ProjectFieldsMapping() {
// Arrange - Create project with specific known values
Project project = createProject("Mapping Test", "Test Description", "#ABCDEF");
HUID projectId = project.getId();
scraft-official and others added 3 commits December 21, 2025 01:11
Removed the skipTests option from the Maven build command.
* build: add dockerfile and compose for frontend

* fix: remove external port for frontend container

* Change ports to expose in Docker Compose file

---------

Co-authored-by: scraft official <63715927+scraft-official@users.noreply.github.com>
Removed the optional step to update the dependency graph in the CI workflow.
Comment on lines +20 to +31
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file backend/pom.xml

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
* feat: add tasks list view

* style: add hover styles
@scraft-official
Copy link
Copy Markdown
Collaborator

@NikodemCyrzan puszczamy release? Czy coś jeszcze chcesz wrzucać?

@NikodemCyrzan
Copy link
Copy Markdown
Collaborator Author

@scraft-official Można robić, mam wszystko zmergowane

@scraft-official scraft-official marked this pull request as ready for review December 21, 2025 20:38
@scraft-official
Copy link
Copy Markdown
Collaborator

scraft-official commented Dec 21, 2025

@NikodemCyrzan to czyń honory! 👍🏼

++ zrób release branch 2.25 :)

@NikodemCyrzan NikodemCyrzan merged commit 8de994d into main Dec 21, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants