| name | domain-modeling |
| description | Generates domain entities and enums for PortalEmpleo following Clean Architecture principles. Use when creating domain models, entity classes, or enum definitions for the job portal application. |
| license | MIT |
| metadata | {"author":"course-team@netmind.es","version":"1.0.0"} |
| compatibility | Requires .NET 8 SDK and C# development environment |
| allowed-tools | Read Write Bash(git:*) Bash(dotnet:*) |
Domain Modeling Skill - PortalEmpleo
When to use this skill
Use this skill when creating domain entities and enums for PortalEmpleo. This skill is automatically triggered when the user mentions:
- Creating entity classes
- Domain models
- Enum definitions
- Clean Architecture domain layer
Project Context
- Architecture: Clean Architecture (Domain layer)
- Entity Base: Standard C# class with Id
- Enums: Used for status and type fields
- Convention: PascalCase for enums, camelCase for properties
Entity Standard
Base Entity Structure
namespace PortalEmpleo.Domain.Entities;
public abstract class BaseEntity
{
public Guid Id { get; set; }
public DateTime CreatedAt { get; set; }
}
User Entity
namespace PortalEmpleo.Domain.Entities;
public class User : BaseEntity
{
public string Email { get; set; } = string.Empty;
public string PasswordHash { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public DateTime BirthDate { get; set; }
public string? Phone { get; set; }
public UserRole Role { get; set; }
public bool IsActive { get; set; } = true;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
JobOffer Entity
namespace PortalEmpleo.Domain.Entities;
public class JobOffer : BaseEntity
{
public string Title { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public string? Location { get; set; }
public decimal? Salary { get; set; }
public ContractType ContractType { get; set; }
public JobOfferStatus Status { get; set; } = JobOfferStatus.Borrador;
public Guid CompanyId { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
Application Entity
namespace PortalEmpleo.Domain.Entities;
public class Application : BaseEntity
{
public Guid JobOfferId { get; set; }
public Guid CandidateId { get; set; }
public ApplicationStatus Status { get; set; } = ApplicationStatus.Pendiente;
public DateTime AppliedAt { get; set; } = DateTime.UtcNow;
public string? Notes { get; set; }
}
Enum Standards
UserRole Enum
namespace PortalEmpleo.Domain.Enums;
public enum UserRole
{
Candidate = 0,
Company = 1,
Admin = 2
}
JobOfferStatus Enum
namespace PortalEmpleo.Domain.Enums;
public enum JobOfferStatus
{
Borrador = 0,
Publicada = 1,
Pausada = 2,
Cerrada = 3
}
ContractType Enum
namespace PortalEmpleo.Domain.Enums;
public enum ContractType
{
TiempoCompleto = 0,
MedioTiempo = 1,
Temporal = 2,
Freelance = 3
}
ApplicationStatus Enum
namespace PortalEmpleo.Domain.Enums;
public enum ApplicationStatus
{
Pendiente = 0,
EnRevision = 1,
Entrevistado = 2,
Aceptado = 3,
Rechazado = 4
}
Required Elements
1. Entity Class
- Inherit from BaseEntity
- XML documentation with
<summary>
- Public properties with types
- Default values where appropriate
- Navigation properties (if needed)
2. Enums
- Public enum declaration
- XML documentation
- Descriptive member names
- Integer values for database mapping
3. Conventions
- PascalCase for class and enum names
- camelCase for properties
- String.Empty for default strings
- Guid for Id (primary key)
- DateTime.UtcNow for CreatedAt
Output Format
Generate:
- Entity classes in Domain/Entities/
- Enums in Domain/Enums/
- Complete C# files with XML documentation
Files to Write
src/PortalEmpleo.Domain/Entities/User.cs
src/PortalEmpleo.Domain/Entities/JobOffer.cs
src/PortalEmpleo.Domain/Entities/Application.cs
src/PortalEmpleo.Domain/Enums/UserRole.cs
src/PortalEmpleo.Domain/Enums/JobOfferStatus.cs
src/PortalEmpleo.Domain/Enums/ContractType.cs
src/PortalEmpleo.Domain/Enums/ApplicationStatus.cs