revet-core

Shared domain models and supporting layers used across Revet libraries. Multi-module project providing core domain models, persistence (Panache), and web (DTOs/mappers).

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "revet-core" with this command: npx skills add revethq/skills/revethq-skills-revet-core

Revet Core Library

Shared domain models and supporting layers used across Revet libraries. Multi-module project providing core domain models, persistence (Panache), and web (DTOs/mappers).

Modules

Module Artifact ID Purpose

core

revet-core-core

Domain models, no framework dependencies

persistence-runtime

revet-core-persistence-runtime

Panache entities, repositories, entity-domain mappers

web

revet-core-web

DTOs, DTO-domain mappers

Dependency Coordinates

Group ID: com.revethq

Version: 0.2.0

Gradle

// Core domain models (no Quarkus dependency) implementation("com.revethq:revet-core-core:0.2.0")

// Persistence layer (Panache entities + repositories) implementation("com.revethq:revet-core-persistence-runtime:0.2.0")

// Web layer (DTOs + mappers) implementation("com.revethq:revet-core-web:0.2.0")

Domain Models (core module)

Identifier

data class Identifier( val system: String? = null, val value: String? = null )

Represents an external identifier with a system namespace and value.

SchemaValidation

data class SchemaValidation( val schemaId: UUID? = null, val isValid: Boolean = false, val validatedOn: OffsetDateTime? = null )

Records schema validation state for a resource.

Metadata

data class Metadata( val identifiers: List<Identifier> = emptyList(), val schemaValidations: List<SchemaValidation> = emptyList(), val properties: Map<String, Any> = emptyMap() )

Aggregate metadata container combining identifiers, schema validation history, and extensible key-value properties.

Organization

data class Organization( val id: Long?, val uuid: UUID, val name: String, val description: String?, val contactInfo: ContactInfo, val locale: String?, val timezone: String, val bucketId: Long?, val isActive: Boolean, val removedAt: LocalDateTime?, ) { data class ContactInfo( val address: String?, val city: String?, val state: String?, val zipCode: String?, val country: String?, val phone: String?, val fax: String?, val website: String?, )

companion object {
    fun create(name: String, ...): Organization
}

fun update(name: String? = null, ...): Organization
fun deactivate(): Organization
fun isNew(): Boolean

}

Business entity with contact information, locale/timezone, and soft-delete lifecycle. Factory method create() generates a UUID and sets defaults. update() returns an immutable copy with changed fields. deactivate() sets isActive = false and stamps removedAt .

Project

data class Project( val id: Long?, val uuid: UUID, val name: String, val description: String?, val organizationId: Long, val clientIds: Set<UUID>, val tags: Set<String>, val isActive: Boolean, val timestamps: Timestamps, ) { data class Timestamps( val createdAt: LocalDateTime, val modifiedAt: LocalDateTime, val removedAt: LocalDate?, )

companion object {
    fun create(name: String, organizationId: Long, ...): Project
}

fun update(name: String? = null, ...): Project
fun deactivate(): Project
fun addClient(clientId: UUID): Project
fun removeClient(clientId: UUID): Project
fun addTag(tag: String): Project
fun removeTag(tag: String): Project
fun isNew(): Boolean

}

Scoped work context belonging to an Organization. Manages client UUIDs and tags as immutable sets. All mutating methods return a new copy with modifiedAt advanced.

Persistence Layer (persistence-runtime module)

Entities

  • OrganizationEntity

  • Panache entity mapped to revet_organizations table. Contact info fields are flattened columns.

  • ProjectEntity

  • Panache entity mapped to revet_projects table. Uses @ManyToOne to OrganizationEntity and @ElementCollection for clientIds (table project_clients ) and tags (table project_tags ).

Repositories

interface OrganizationRepository { fun findAll(includeInactive: Boolean = false): List<Organization> fun findById(id: Long): Organization? fun findByUuid(uuid: UUID): Organization? fun save(organization: Organization): Organization fun delete(id: Long): Boolean }

interface ProjectRepository { fun findAll(includeInactive: Boolean = false): List<Project> fun findById(id: Long): Project? fun findByUuid(uuid: UUID): Project? fun findByOrganizationId(organizationId: Long, includeInactive: Boolean = false): List<Project> fun save(project: Project): Project fun delete(id: Long): Boolean }

Both repositories have @ApplicationScoped Panache implementations with @Transactional write operations and soft-delete support.

Mappers

  • OrganizationMapper

  • Converts between OrganizationEntity and Organization domain model. Handles ContactInfo composition.

  • ProjectMapper

  • Converts between ProjectEntity and Project domain model. Handles Timestamps composition.

Web Layer (web module)

DTOs

Organization:

  • OrganizationDTO

  • Response DTO with contact info flattened to top-level fields

  • CreateOrganizationRequest

  • Creation request

  • UpdateOrganizationRequest

  • Partial update request (all fields optional)

Project:

  • ProjectDTO

  • Response DTO with timestamps flattened to createdAt /modifiedAt

  • CreateProjectRequest / UpdateProjectRequest

  • AddClientRequest / RemoveClientRequest

  • AddTagRequest / RemoveTagRequest

Mappers

  • OrganizationDTOMapper

  • Maps Organization domain to/from DTOs. Includes toContactInfo() helpers for request conversion.

  • ProjectDTOMapper

  • Maps Project domain to ProjectDTO .

Characteristics

  • Immutable by Default: Domain models are data classes; all mutations return new copies

  • Soft Delete: Both Organization and Project use isActive

  • timestamp pattern
  • Framework Independence: Core module has zero framework dependencies

  • Layered Architecture: Domain ↔ Entity ↔ DTO with explicit mappers at each boundary

Used By

  • revet-iam

  • User, Group, Policy entities include metadata: Metadata

  • revet-auth

  • Application, Client, Scope entities use Metadata

  • revet-documents

  • Consumes Organization and Project models

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

revet-iam

No summary provided by upstream source.

Repository SourceNeeds Review
General

revet-auth

No summary provided by upstream source.

Repository SourceNeeds Review
General

OpenClaw Skill Growth

Make OpenClaw Skills observable, diagnosable, and safely improvable over time. Use this when the user wants to maintain many SKILL.md files, inspect repeated...

Registry SourceRecently Updated
171Profile unavailable
General

Find Skills for ClawHub

Search for and discover OpenClaw skills from ClawHub (the official skill registry). Activate when user asks about finding skills, installing skills, or wants...

Registry SourceRecently Updated
2871Profile unavailable