UNPKG

@codervisor/devlog-core

Version:

Core devlog management functionality

105 lines (104 loc) 3.81 kB
/** * Project Entity for database storage * * Simplified compared to WorkspaceEntity - no per-project storage configuration. * All projects share the same centralized database configuration. */ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var ProjectEntity_1; import 'reflect-metadata'; import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'; import { JsonColumn, TimestampColumn, getTimestampType } from './decorators.js'; let ProjectEntity = ProjectEntity_1 = class ProjectEntity { id; name; description; repositoryUrl; settings; createdAt; lastAccessedAt; /** * Convert entity to ProjectMetadata type */ toProjectMetadata() { return { id: this.id, name: this.name, description: this.description, repositoryUrl: this.repositoryUrl, settings: this.settings || {}, createdAt: this.createdAt, lastAccessedAt: this.lastAccessedAt, }; } /** * Create entity from ProjectMetadata */ static fromProjectData(project) { const entity = new ProjectEntity_1(); // id will be auto-generated by the database entity.name = project.name; entity.description = project.description; entity.repositoryUrl = project.repositoryUrl; entity.settings = project.settings; entity.lastAccessedAt = new Date(); return entity; } /** * Update entity with partial project data */ updateFromProjectData(updates) { if (updates.name !== undefined) this.name = updates.name; if (updates.description !== undefined) this.description = updates.description; if (updates.repositoryUrl !== undefined) this.repositoryUrl = updates.repositoryUrl; if (updates.settings !== undefined) this.settings = updates.settings; this.lastAccessedAt = new Date(); } }; __decorate([ PrimaryGeneratedColumn(), __metadata("design:type", Number) ], ProjectEntity.prototype, "id", void 0); __decorate([ Column(), __metadata("design:type", String) ], ProjectEntity.prototype, "name", void 0); __decorate([ Column({ nullable: true }), __metadata("design:type", String) ], ProjectEntity.prototype, "description", void 0); __decorate([ Column({ nullable: true }), __metadata("design:type", String) ], ProjectEntity.prototype, "repositoryUrl", void 0); __decorate([ JsonColumn({ nullable: true }), __metadata("design:type", Object) ], ProjectEntity.prototype, "settings", void 0); __decorate([ CreateDateColumn({ type: getTimestampType(), name: 'created_at', }), __metadata("design:type", Date) ], ProjectEntity.prototype, "createdAt", void 0); __decorate([ TimestampColumn({ name: 'last_accessed_at' }), __metadata("design:type", Date) ], ProjectEntity.prototype, "lastAccessedAt", void 0); ProjectEntity = ProjectEntity_1 = __decorate([ Entity('devlog_projects') ], ProjectEntity); export { ProjectEntity };