You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.7 KiB
TypeScript
101 lines
2.7 KiB
TypeScript
// Copyright (C) 2020-2022 Intel Corporation
|
|
// Copyright (C) 2022 CVAT.ai Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import User from './user';
|
|
import { ArgumentError } from './exceptions';
|
|
|
|
export interface RawCommentData {
|
|
id?: number;
|
|
message?: string;
|
|
created_date?: string;
|
|
updated_date?: string;
|
|
owner?: any;
|
|
}
|
|
|
|
interface SerializedCommentData extends RawCommentData{
|
|
owner_id?: number;
|
|
issue?: number;
|
|
}
|
|
|
|
export default class Comment {
|
|
public readonly id: number;
|
|
public readonly createdDate: string;
|
|
public readonly updatedDate: string;
|
|
public readonly owner: User;
|
|
public message: string;
|
|
|
|
constructor(initialData: RawCommentData) {
|
|
const data: RawCommentData = {
|
|
id: undefined,
|
|
message: undefined,
|
|
created_date: undefined,
|
|
updated_date: undefined,
|
|
owner: undefined,
|
|
};
|
|
|
|
for (const property in data) {
|
|
if (Object.prototype.hasOwnProperty.call(data, property) && property in initialData) {
|
|
data[property] = initialData[property];
|
|
}
|
|
}
|
|
|
|
if (data.owner && !(data.owner instanceof User)) data.owner = new User(data.owner);
|
|
if (typeof data.created_date === 'undefined') {
|
|
data.created_date = new Date().toISOString();
|
|
}
|
|
|
|
Object.defineProperties(
|
|
this,
|
|
Object.freeze({
|
|
id: {
|
|
get: () => data.id,
|
|
},
|
|
message: {
|
|
get: () => data.message,
|
|
set: (value) => {
|
|
if (!value.trim().length) {
|
|
throw new ArgumentError('Value must not be empty');
|
|
}
|
|
data.message = value;
|
|
},
|
|
},
|
|
createdDate: {
|
|
get: () => data.created_date,
|
|
},
|
|
updatedDate: {
|
|
get: () => data.updated_date,
|
|
},
|
|
owner: {
|
|
get: () => data.owner,
|
|
},
|
|
__internal: {
|
|
get: () => data,
|
|
},
|
|
}),
|
|
);
|
|
}
|
|
|
|
public serialize(): SerializedCommentData {
|
|
const data: SerializedCommentData = {
|
|
message: this.message,
|
|
};
|
|
|
|
if (typeof this.id === 'number') {
|
|
data.id = this.id;
|
|
}
|
|
if (this.createdDate) {
|
|
data.created_date = this.createdDate;
|
|
}
|
|
if (this.updatedDate) {
|
|
data.updated_date = this.updatedDate;
|
|
}
|
|
if (this.owner) {
|
|
data.owner_id = this.owner.serialize().id;
|
|
}
|
|
|
|
return data;
|
|
}
|
|
}
|