@codervisor/devlog-core
Version:
Core devlog management functionality
105 lines (104 loc) • 3.81 kB
JavaScript
/**
* 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 };