feat: improve store and model typing
This commit is contained in:
@ -2,7 +2,11 @@ import {objectToCamelCase} from '@/helpers/case'
|
||||
import {omitBy, isNil} from '@/helpers/utils'
|
||||
import type {Right} from '@/models/constants/rights'
|
||||
|
||||
export default class AbstractModel {
|
||||
export interface IAbstract {
|
||||
maxRight: Right | null
|
||||
}
|
||||
|
||||
export default class AbstractModel implements IAbstract {
|
||||
|
||||
/**
|
||||
* The max right the user has on this object, as returned by the x-max-right header from the api.
|
||||
|
@ -1,12 +1,21 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import FileModel from './file'
|
||||
import UserModel, {type IUser} from './user'
|
||||
import FileModel, {type IFile} from './file'
|
||||
import type {IAbstract} from './abstractModel'
|
||||
|
||||
export default class AttachmentModel extends AbstractModel {
|
||||
export interface IAttachment extends IAbstract {
|
||||
id: number
|
||||
taskId: number
|
||||
createdBy: UserModel
|
||||
file: FileModel
|
||||
createdBy: IUser
|
||||
file: IFile
|
||||
created: Date
|
||||
}
|
||||
|
||||
export default class AttachmentModel extends AbstractModel implements IAttachment {
|
||||
declare id: number
|
||||
declare taskId: number
|
||||
createdBy: IUser
|
||||
file: IFile
|
||||
created: Date
|
||||
|
||||
constructor(data) {
|
||||
|
@ -1,9 +1,13 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import AbstractModel, { type IAbstract } from './abstractModel'
|
||||
|
||||
export type AVATAR_PROVIDERS = 'default' | 'initials' | 'gravatar' | 'marble' | 'upload'
|
||||
export type AvatarProvider = 'default' | 'initials' | 'gravatar' | 'marble' | 'upload'
|
||||
|
||||
export default class AvatarModel extends AbstractModel {
|
||||
avatarProvider: AVATAR_PROVIDERS
|
||||
export interface IAvatar extends IAbstract {
|
||||
avatarProvider: AvatarProvider
|
||||
}
|
||||
|
||||
export default class AvatarModel extends AbstractModel implements IAvatar {
|
||||
declare avatarProvider: AvatarProvider
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import AbstractModel, { type IAbstract } from './abstractModel'
|
||||
|
||||
export default class BackgroundImageModel extends AbstractModel {
|
||||
export interface IBackgroundImage extends IAbstract {
|
||||
id: number
|
||||
url: string
|
||||
thumb: string
|
||||
@ -9,6 +9,17 @@ export default class BackgroundImageModel extends AbstractModel {
|
||||
authorName: string
|
||||
}
|
||||
blurHash: string
|
||||
}
|
||||
|
||||
export default class BackgroundImageModel extends AbstractModel implements IBackgroundImage {
|
||||
declare id: number
|
||||
declare url: string
|
||||
declare thumb: string
|
||||
declare info: {
|
||||
author: string
|
||||
authorName: string
|
||||
}
|
||||
declare blurHash: string
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,17 +1,31 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import TaskModel from './task'
|
||||
import AbstractModel, { type IAbstract } from './abstractModel'
|
||||
import UserModel, { type IUser } from './user'
|
||||
import TaskModel, { type ITask } from './task'
|
||||
|
||||
export default class BucketModel extends AbstractModel {
|
||||
export interface IBucket extends IAbstract {
|
||||
id: number
|
||||
title: string
|
||||
listId: number
|
||||
limit: number
|
||||
tasks: TaskModel[]
|
||||
tasks: ITask[]
|
||||
isDoneBucket: boolean
|
||||
position: number
|
||||
|
||||
createdBy: UserModel
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class BucketModel extends AbstractModel implements IBucket {
|
||||
declare id: number
|
||||
declare title: string
|
||||
declare listId: number
|
||||
declare limit: number
|
||||
declare tasks: ITask[]
|
||||
declare isDoneBucket: boolean
|
||||
declare position: number
|
||||
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
|
@ -1,8 +1,13 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import AbstractModel, { type IAbstract } from './abstractModel'
|
||||
|
||||
export default class CaldavTokenModel extends AbstractModel {
|
||||
id: number
|
||||
created: Date
|
||||
export interface ICaldavToken extends IAbstract {
|
||||
id: number;
|
||||
created: Date;
|
||||
}
|
||||
|
||||
export default class CaldavTokenModel extends AbstractModel implements ICaldavToken {
|
||||
declare id: number
|
||||
declare created: Date
|
||||
|
||||
constructor(data? : Object) {
|
||||
super(data)
|
||||
|
@ -1,8 +1,13 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
|
||||
export default class EmailUpdateModel extends AbstractModel {
|
||||
interface IEmailUpdate {
|
||||
newEmail: string
|
||||
password: string
|
||||
}
|
||||
|
||||
export default class EmailUpdateModel extends AbstractModel implements IEmailUpdate {
|
||||
declare newEmail: string
|
||||
declare password: string
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,11 +1,19 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
|
||||
export default class FileModel extends AbstractModel {
|
||||
export interface IFile {
|
||||
id: number
|
||||
mime: string
|
||||
name: string
|
||||
size: number
|
||||
created: Date
|
||||
}
|
||||
|
||||
export default class FileModel extends AbstractModel implements IFile {
|
||||
declare id: number
|
||||
declare mime: string
|
||||
declare name: string
|
||||
declare size: number
|
||||
created: Date
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
@ -1,19 +1,33 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import UserModel, { type IUser } from './user'
|
||||
import {colorIsDark} from '@/helpers/color/colorIsDark'
|
||||
|
||||
const DEFAULT_LABEL_BACKGROUND_COLOR = 'e8e8e8'
|
||||
export default class LabelModel extends AbstractModel {
|
||||
|
||||
export interface ILabel {
|
||||
id: number
|
||||
title: string
|
||||
hexColor: string
|
||||
description: string
|
||||
createdBy: UserModel
|
||||
createdBy: IUser
|
||||
listId: number
|
||||
textColor: string
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class LabelModel extends AbstractModel implements ILabel {
|
||||
declare id: number
|
||||
declare title: string
|
||||
declare hexColor: string
|
||||
declare description: string
|
||||
declare createdBy: IUser
|
||||
declare listId: number
|
||||
declare textColor: string
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
@ -1,9 +1,15 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
|
||||
export default class LabelTask extends AbstractModel {
|
||||
interface ILabel {
|
||||
id: number
|
||||
taskId: number
|
||||
labelId: number
|
||||
}
|
||||
|
||||
export default class LabelTask extends AbstractModel implements ILabel {
|
||||
declare id: number
|
||||
declare taskId: number
|
||||
declare labelId: number
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,18 +1,31 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import AbstractModel, { type IAbstract } from './abstractModel'
|
||||
import UserModel, { type IUser } from './user'
|
||||
import {RIGHTS, type Right} from '@/models/constants/rights'
|
||||
|
||||
export default class LinkShareModel extends AbstractModel {
|
||||
export interface ILinkShare extends IAbstract {
|
||||
id: number
|
||||
hash: string
|
||||
right: Right
|
||||
sharedBy: UserModel
|
||||
sharedBy: IUser
|
||||
sharingType: number // FIXME: use correct numbers
|
||||
listId: number
|
||||
name: string
|
||||
password: string
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class LinkShareModel extends AbstractModel implements ILinkShare {
|
||||
declare id: number
|
||||
declare hash: string
|
||||
declare right: Right
|
||||
sharedBy: IUser
|
||||
declare sharingType: number // FIXME: use correct numbers
|
||||
declare listId: number
|
||||
declare name: string
|
||||
declare password: string
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
constructor(data) {
|
||||
// The constructor of AbstractModel handles all the default parsing.
|
||||
|
@ -1,28 +1,49 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import TaskModel from './task'
|
||||
import UserModel from './user'
|
||||
import type NamespaceModel from './namespace'
|
||||
import {getSavedFilterIdFromListId} from '@/helpers/savedFilter'
|
||||
import SubscriptionModel from '@/models/subscription'
|
||||
import AbstractModel, { type IAbstract } from '@/models/abstractModel'
|
||||
import TaskModel, { type ITask } from '@/models/task'
|
||||
import UserModel, { type IUser } from '@/models/user'
|
||||
import SubscriptionModel, { type ISubscription } from '@/models/subscription'
|
||||
import type { INamespace } from '@/models/namespace'
|
||||
|
||||
export default class ListModel extends AbstractModel {
|
||||
import {getSavedFilterIdFromListId} from '@/helpers/savedFilter'
|
||||
|
||||
export interface IList extends IAbstract {
|
||||
id: number
|
||||
title: string
|
||||
description: string
|
||||
owner: UserModel
|
||||
tasks: TaskModel[]
|
||||
namespaceId: NamespaceModel['id']
|
||||
owner: IUser
|
||||
tasks: ITask[]
|
||||
namespaceId: INamespace['id']
|
||||
isArchived: boolean
|
||||
hexColor: string
|
||||
identifier: string
|
||||
backgroundInformation: any
|
||||
isFavorite: boolean
|
||||
subscription: SubscriptionModel
|
||||
subscription: ISubscription
|
||||
position: number
|
||||
backgroundBlurHash: string
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class ListModel extends AbstractModel implements IList {
|
||||
declare id: number
|
||||
declare title: string
|
||||
declare description: string
|
||||
owner: IUser
|
||||
tasks: ITask[]
|
||||
declare namespaceId: INamespace['id']
|
||||
declare isArchived: boolean
|
||||
declare hexColor: string
|
||||
declare identifier: string
|
||||
declare backgroundInformation: any
|
||||
declare isFavorite: boolean
|
||||
declare subscription: ISubscription
|
||||
declare position: number
|
||||
declare backgroundBlurHash: string
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
@ -1,11 +1,17 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import ListModel from './list'
|
||||
import NamespaceModel from './namespace'
|
||||
import ListModel, { type IList } from './list'
|
||||
import type { INamespace } from './namespace'
|
||||
|
||||
export default class ListDuplicateModel extends AbstractModel {
|
||||
export interface ListDuplicate {
|
||||
listId: number
|
||||
namespaceId: NamespaceModel['id']
|
||||
list: ListModel
|
||||
namespaceId: INamespace['id']
|
||||
list: IList
|
||||
}
|
||||
|
||||
export default class ListDuplicateModel extends AbstractModel implements ListDuplicate {
|
||||
declare listId: number
|
||||
declare namespaceId: INamespace['id']
|
||||
list: IList
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
@ -1,17 +1,31 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import ListModel from './list'
|
||||
import UserModel from './user'
|
||||
import SubscriptionModel from '@/models/subscription'
|
||||
import AbstractModel, { type IAbstract } from './abstractModel'
|
||||
import ListModel, { type IList } from './list'
|
||||
import UserModel, { type IUser } from './user'
|
||||
import SubscriptionModel, { type ISubscription } from '@/models/subscription'
|
||||
|
||||
export default class NamespaceModel extends AbstractModel {
|
||||
export interface INamespace extends IAbstract {
|
||||
id: number
|
||||
title: string
|
||||
description: string
|
||||
owner: UserModel
|
||||
lists: ListModel[]
|
||||
owner: IUser
|
||||
lists: IList[]
|
||||
isArchived: boolean
|
||||
hexColor: string
|
||||
subscription: SubscriptionModel
|
||||
subscription: ISubscription
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class NamespaceModel extends AbstractModel implements INamespace {
|
||||
declare id: number
|
||||
declare title: string
|
||||
declare description: string
|
||||
owner: IUser
|
||||
lists: IList[]
|
||||
declare isArchived: boolean
|
||||
declare hexColor: string
|
||||
declare subscription: ISubscription
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
|
@ -1,10 +1,10 @@
|
||||
import AbstractModel from '@/models/abstractModel'
|
||||
import {parseDateOrNull} from '@/helpers/parseDateOrNull'
|
||||
import UserModel from '@/models/user'
|
||||
import TaskModel from '@/models/task'
|
||||
import TaskCommentModel from '@/models/taskComment'
|
||||
import UserModel, { type IUser } from '@/models/user'
|
||||
import TaskModel, { type ITask } from '@/models/task'
|
||||
import TaskCommentModel, { type ITaskComment } from '@/models/taskComment'
|
||||
import ListModel from '@/models/list'
|
||||
import TeamModel from '@/models/team'
|
||||
import TeamModel, { type ITeam } from '@/models/team'
|
||||
|
||||
export const NOTIFICATION_NAMES = {
|
||||
'TASK_COMMENT': 'task.comment',
|
||||
@ -15,32 +15,32 @@ export const NOTIFICATION_NAMES = {
|
||||
} as const
|
||||
|
||||
interface Notification {
|
||||
doer: UserModel
|
||||
doer: IUser
|
||||
}
|
||||
interface NotificationTask extends Notification {
|
||||
task: TaskModel
|
||||
comment: TaskCommentModel
|
||||
task: ITask
|
||||
comment: ITaskComment
|
||||
}
|
||||
|
||||
interface NotificationAssigned extends Notification {
|
||||
task: TaskModel
|
||||
assignee: UserModel
|
||||
task: ITask
|
||||
assignee: IUser
|
||||
}
|
||||
|
||||
interface NotificationDeleted extends Notification {
|
||||
task: TaskModel
|
||||
task: ITask
|
||||
}
|
||||
|
||||
interface NotificationCreated extends Notification {
|
||||
task: TaskModel
|
||||
task: ITask
|
||||
}
|
||||
|
||||
interface NotificationMemberAdded extends Notification {
|
||||
member: UserModel
|
||||
team: TeamModel
|
||||
member: IUser
|
||||
team: ITeam
|
||||
}
|
||||
|
||||
export default class NotificationModel extends AbstractModel {
|
||||
export interface INotification {
|
||||
id: number
|
||||
name: string
|
||||
notification: NotificationTask | NotificationAssigned | NotificationDeleted | NotificationCreated | NotificationMemberAdded
|
||||
@ -48,6 +48,16 @@ export default class NotificationModel extends AbstractModel {
|
||||
readAt: Date | null
|
||||
|
||||
created: Date
|
||||
}
|
||||
|
||||
export default class NotificationModel extends AbstractModel implements INotification {
|
||||
declare id: number
|
||||
declare name: string
|
||||
declare notification: NotificationTask | NotificationAssigned | NotificationDeleted | NotificationCreated | NotificationMemberAdded
|
||||
declare read: boolean
|
||||
readAt: Date | null
|
||||
|
||||
created: Date
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
@ -1,9 +1,15 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
|
||||
export default class PasswordResetModel extends AbstractModel {
|
||||
export interface IPasswordReset {
|
||||
token: string
|
||||
newPassword: string
|
||||
email: string
|
||||
}
|
||||
|
||||
export default class PasswordResetModel extends AbstractModel implements IPasswordReset {
|
||||
token: string
|
||||
declare newPassword: string
|
||||
declare email: string
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
@ -1,8 +1,13 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import AbstractModel from '@/models/abstractModel'
|
||||
|
||||
export default class PasswordUpdateModel extends AbstractModel {
|
||||
export interface IPasswordUpdate {
|
||||
newPassword: string
|
||||
oldPassword: string
|
||||
}
|
||||
|
||||
export default class PasswordUpdateModel extends AbstractModel implements IPasswordUpdate {
|
||||
declare newPassword: string
|
||||
declare oldPassword: string
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import AbstractModel from '@/models/abstractModel'
|
||||
import UserModel from '@/models/user'
|
||||
import UserModel, { type IUser } from '@/models/user'
|
||||
|
||||
export default class SavedFilterModel extends AbstractModel {
|
||||
export interface ISavedFilter {
|
||||
id: 0
|
||||
title: string
|
||||
description: string
|
||||
@ -15,7 +15,26 @@ export default class SavedFilterModel extends AbstractModel {
|
||||
filterIncludeNulls: boolean
|
||||
}
|
||||
|
||||
owner: any
|
||||
owner: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class SavedFilterModel extends AbstractModel implements ISavedFilter {
|
||||
declare id: 0
|
||||
declare title: string
|
||||
declare description: string
|
||||
declare filters: {
|
||||
sortBy: ('done' | 'id')[]
|
||||
orderBy: ('asc' | 'desc')[]
|
||||
filterBy: 'done'[]
|
||||
filterValue: 'false'[]
|
||||
filterComparator: 'equals'[]
|
||||
filterConcat: 'and'
|
||||
filterIncludeNulls: boolean
|
||||
}
|
||||
|
||||
owner: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
|
@ -1,11 +1,20 @@
|
||||
import AbstractModel from '@/models/abstractModel'
|
||||
import UserModel from '@/models/user'
|
||||
import UserModel, { type IUser } from '@/models/user'
|
||||
|
||||
export default class SubscriptionModel extends AbstractModel {
|
||||
export interface ISubscription {
|
||||
id: number
|
||||
entity: string // FIXME: correct type?
|
||||
entityId: number // FIXME: correct type?
|
||||
user: UserModel
|
||||
user: IUser
|
||||
|
||||
created: Date
|
||||
}
|
||||
|
||||
export default class SubscriptionModel extends AbstractModel implements ISubscription {
|
||||
declare id: number
|
||||
declare entity: string // FIXME: correct type?
|
||||
declare entityId: number // FIXME: correct type?
|
||||
user: IUser
|
||||
|
||||
created: Date
|
||||
|
||||
|
@ -1,12 +1,14 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import LabelModel from './label'
|
||||
import AttachmentModel from './attachment'
|
||||
import type { Priority } from '@/models/constants/priorities'
|
||||
|
||||
import AbstractModel from '@/models/abstractModel'
|
||||
import UserModel, { type IUser } from '@/models/user'
|
||||
import LabelModel, { type ILabel } from '@/models/label'
|
||||
import AttachmentModel, {type IAttachment} from '@/models/attachment'
|
||||
import SubscriptionModel, { type ISubscription } from '@/models/subscription'
|
||||
import type { IList } from '@/models/list'
|
||||
|
||||
import SubscriptionModel from '@/models/subscription'
|
||||
import {parseDateOrNull} from '@/helpers/parseDateOrNull'
|
||||
import type ListModel from './list'
|
||||
import type { Priority } from './constants/priorities'
|
||||
import type { IBucket } from './bucket'
|
||||
|
||||
const SUPPORTS_TRIGGERED_NOTIFICATION = 'Notification' in window && 'showTrigger' in Notification.prototype
|
||||
export const TASK_DEFAULT_COLOR = '#1973ff'
|
||||
@ -24,15 +26,15 @@ export interface RepeatAfter {
|
||||
amount: number
|
||||
}
|
||||
|
||||
export default class TaskModel extends AbstractModel {
|
||||
export interface ITask {
|
||||
id: number
|
||||
title: string
|
||||
description: string
|
||||
done: boolean
|
||||
doneAt: Date | null
|
||||
priority: Priority
|
||||
labels: LabelModel[]
|
||||
assignees: UserModel[]
|
||||
labels: ILabel[]
|
||||
assignees: IUser[]
|
||||
|
||||
dueDate: Date | null
|
||||
startDate: Date | null
|
||||
@ -41,26 +43,64 @@ export default class TaskModel extends AbstractModel {
|
||||
repeatFromCurrentDate: boolean
|
||||
repeatMode: TaskRepeatMode
|
||||
reminderDates: Date[]
|
||||
parentTaskId: TaskModel['id']
|
||||
parentTaskId: ITask['id']
|
||||
hexColor: string
|
||||
percentDone: number
|
||||
relatedTasks: { [relationKind: string]: TaskModel } // FIXME: use relationKinds
|
||||
attachments: AttachmentModel[]
|
||||
relatedTasks: { [relationKind: string]: ITask } // FIXME: use relationKinds
|
||||
attachments: IAttachment[]
|
||||
identifier: string
|
||||
index: number
|
||||
isFavorite: boolean
|
||||
subscription: SubscriptionModel
|
||||
subscription: ISubscription
|
||||
|
||||
position: number
|
||||
kanbanPosition: number
|
||||
|
||||
createdBy: UserModel
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
listId: ListModel['id'] // Meta, only used when creating a new task
|
||||
listId: IList['id'] // Meta, only used when creating a new task
|
||||
bucketId: IBucket['id']
|
||||
}
|
||||
|
||||
constructor(data: Partial<TaskModel>) {
|
||||
export default class TaskModel extends AbstractModel implements ITask {
|
||||
id: number
|
||||
title: string
|
||||
declare description: string
|
||||
declare done: boolean
|
||||
doneAt: Date | null
|
||||
declare priority: Priority
|
||||
labels: ILabel[]
|
||||
assignees: IUser[]
|
||||
|
||||
dueDate: Date | null
|
||||
startDate: Date | null
|
||||
endDate: Date | null
|
||||
declare repeatAfter: number | RepeatAfter
|
||||
declare repeatFromCurrentDate: boolean
|
||||
declare repeatMode: TaskRepeatMode
|
||||
reminderDates: Date[]
|
||||
declare parentTaskId: ITask['id']
|
||||
declare hexColor: string
|
||||
declare percentDone: number
|
||||
declare relatedTasks: { [relationKind: string]: ITask } // FIXME: use relationKinds
|
||||
attachments: IAttachment[]
|
||||
declare identifier: string
|
||||
declare index: number
|
||||
declare isFavorite: boolean
|
||||
declare subscription: ISubscription
|
||||
|
||||
declare position: number
|
||||
declare kanbanPosition: number
|
||||
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
listId: IList['id'] // Meta, only used when creating a new task
|
||||
|
||||
constructor(data: Partial<ITask>) {
|
||||
super(data)
|
||||
|
||||
this.id = Number(this.id)
|
||||
@ -120,6 +160,7 @@ export default class TaskModel extends AbstractModel {
|
||||
|
||||
this.listId = Number(this.listId)
|
||||
}
|
||||
bucketId: number
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,11 +1,17 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import type UserModel from './user'
|
||||
import type TaskModel from './task'
|
||||
import type { ITask } from './task'
|
||||
import type { IUser } from './user'
|
||||
|
||||
export default class TaskAssigneeModel extends AbstractModel {
|
||||
export interface ITaskAssignee {
|
||||
created: Date
|
||||
userId: UserModel['id']
|
||||
taskId: TaskModel['id']
|
||||
userId: IUser['id']
|
||||
taskId: ITask['id']
|
||||
}
|
||||
|
||||
export default class TaskAssigneeModel extends AbstractModel implements ITaskAssignee {
|
||||
created: Date
|
||||
declare userId: IUser['id']
|
||||
declare taskId: ITask['id']
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
@ -1,12 +1,22 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import type TaskModel from './task'
|
||||
import UserModel, { type IUser } from './user'
|
||||
import type { ITask } from './task'
|
||||
|
||||
export default class TaskCommentModel extends AbstractModel {
|
||||
export interface ITaskComment {
|
||||
id: number
|
||||
taskId: TaskModel['id']
|
||||
taskId: ITask['id']
|
||||
comment: string
|
||||
author: UserModel
|
||||
author: IUser
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class TaskCommentModel extends AbstractModel implements ITaskComment {
|
||||
declare id: number
|
||||
declare taskId: ITask['id']
|
||||
declare comment: string
|
||||
author: IUser
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
|
@ -1,6 +1,6 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import type TaskModel from './task'
|
||||
import UserModel, { type IUser } from './user'
|
||||
import type { ITask } from './task'
|
||||
|
||||
export const RELATION_KIND = {
|
||||
'SUBTASK': 'subtask',
|
||||
@ -19,13 +19,23 @@ export const RELATION_KINDS = [...Object.values(RELATION_KIND)] as const
|
||||
|
||||
export type RelationKind = typeof RELATION_KINDS[number]
|
||||
|
||||
export default class TaskRelationModel extends AbstractModel {
|
||||
export interface ITaskRelationModel {
|
||||
id: number
|
||||
otherTaskId: TaskModel['id']
|
||||
taskId: TaskModel['id']
|
||||
otherTaskId: ITask['id']
|
||||
taskId: ITask['id']
|
||||
relationKind: RelationKind
|
||||
|
||||
createdBy: UserModel
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
}
|
||||
|
||||
export default class TaskRelationModel extends AbstractModel implements ITaskRelationModel {
|
||||
declare id: number
|
||||
declare otherTaskId: ITask['id']
|
||||
declare taskId: ITask['id']
|
||||
declare relationKind: RelationKind
|
||||
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
|
||||
constructor(data) {
|
||||
|
@ -1,16 +1,28 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserModel from './user'
|
||||
import TeamMemberModel from './teamMember'
|
||||
import UserModel, { type IUser } from './user'
|
||||
import TeamMemberModel, { type ITeamMember } from './teamMember'
|
||||
import {RIGHTS, type Right} from '@/models/constants/rights'
|
||||
|
||||
export default class TeamModel extends AbstractModel {
|
||||
id: 0
|
||||
export interface ITeam {
|
||||
id: number
|
||||
name: string
|
||||
description: string
|
||||
members: TeamMemberModel[]
|
||||
members: ITeamMember[]
|
||||
right: Right
|
||||
|
||||
createdBy: UserModel
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class TeamModel extends AbstractModel implements ITeam {
|
||||
declare id: number
|
||||
declare name: string
|
||||
declare description: string
|
||||
members: ITeamMember[]
|
||||
declare right: Right
|
||||
|
||||
createdBy: IUser
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
|
@ -1,8 +1,12 @@
|
||||
import TeamShareBaseModel from './teamShareBase'
|
||||
import type ListModel from './list'
|
||||
import type { IList } from './list'
|
||||
|
||||
export default class TeamListModel extends TeamShareBaseModel {
|
||||
listId: ListModel['id']
|
||||
export interface ITeamList {
|
||||
listId: IList['id']
|
||||
}
|
||||
|
||||
export default class TeamListModel extends TeamShareBaseModel implements ITeamList {
|
||||
declare listId: IList['id']
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,9 +1,14 @@
|
||||
import UserModel from './user'
|
||||
import type ListModel from './list'
|
||||
import type { IList } from './list'
|
||||
|
||||
export default class TeamMemberModel extends UserModel {
|
||||
export interface ITeamMember {
|
||||
admin: boolean
|
||||
teamId: ListModel['id']
|
||||
teamId: IList['id']
|
||||
}
|
||||
|
||||
export default class TeamMemberModel extends UserModel implements ITeamMember {
|
||||
declare admin: boolean
|
||||
declare teamId: IList['id']
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,8 +1,12 @@
|
||||
import TeamShareBaseModel from './teamShareBase'
|
||||
import type NamespaceModel from './namespace'
|
||||
import type { INamespace } from './namespace'
|
||||
|
||||
export default class TeamNamespaceModel extends TeamShareBaseModel {
|
||||
namespaceId: NamespaceModel['id']
|
||||
export interface ITeamNamespace {
|
||||
namespaceId: INamespace['id']
|
||||
}
|
||||
|
||||
export default class TeamNamespaceModel extends TeamShareBaseModel implements ITeamNamespace {
|
||||
declare namespaceId: INamespace['id']
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,14 +1,22 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import type TeamModel from './team'
|
||||
import {RIGHTS, type Right} from '@/models/constants/rights'
|
||||
import type { ITeam } from './team'
|
||||
|
||||
export interface ITeamShareBase {
|
||||
teamId: ITeam['id']
|
||||
right: Right
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
/**
|
||||
* This class is a base class for common team sharing model.
|
||||
* It is extended in a way so it can be used for namespaces as well for lists.
|
||||
*/
|
||||
export default class TeamShareBaseModel extends AbstractModel {
|
||||
teamId: TeamModel['id']
|
||||
right: Right
|
||||
export default class TeamShareBaseModel extends AbstractModel implements ITeamShareBase {
|
||||
declare teamId: ITeam['id']
|
||||
declare right: Right
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
|
@ -1,9 +1,15 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
|
||||
export default class TotpModel extends AbstractModel {
|
||||
export interface ITotp {
|
||||
secret: string
|
||||
enabled: boolean
|
||||
url: string
|
||||
}
|
||||
|
||||
export default class TotpModel extends AbstractModel implements ITotp{
|
||||
declare secret: string
|
||||
declare enabled: boolean
|
||||
declare url: string
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import UserSettingsModel from '@/models/userSettings'
|
||||
import UserSettingsModel, { type IUserSettings } from '@/models/userSettings'
|
||||
|
||||
export default class UserModel extends AbstractModel {
|
||||
export interface IUser {
|
||||
id: number
|
||||
email: string
|
||||
username: string
|
||||
@ -9,7 +9,18 @@ export default class UserModel extends AbstractModel {
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
settings: UserSettingsModel
|
||||
settings: IUserSettings
|
||||
}
|
||||
|
||||
export default class UserModel extends AbstractModel implements IUser {
|
||||
declare id: number
|
||||
declare email: string
|
||||
declare username: string
|
||||
declare name: string
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
settings: IUserSettings
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
@ -28,6 +39,7 @@ export default class UserModel extends AbstractModel {
|
||||
email: '',
|
||||
username: '',
|
||||
name: '',
|
||||
|
||||
created: null,
|
||||
updated: null,
|
||||
settings: null,
|
||||
|
@ -1,8 +1,13 @@
|
||||
import UserShareBaseModel from './userShareBase'
|
||||
import type ListModel from './list'
|
||||
import type { IList } from './list'
|
||||
|
||||
export interface IUserList {
|
||||
listId: IList['id']
|
||||
}
|
||||
|
||||
// This class extends the user share model with a 'rights' parameter which is used in sharing
|
||||
export default class UserListModel extends UserShareBaseModel {
|
||||
listId: ListModel['id']
|
||||
export default class UserListModel extends UserShareBaseModel implements IUserList {
|
||||
declare listId: IList['id']
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,9 +1,13 @@
|
||||
import UserShareBaseModel from './userShareBase'
|
||||
import type NamespaceModel from './namespace'
|
||||
import type { INamespace } from './namespace'
|
||||
|
||||
export interface IUserNamespace {
|
||||
namespaceId: INamespace['id']
|
||||
}
|
||||
|
||||
// This class extends the user share model with a 'rights' parameter which is used in sharing
|
||||
export default class UserNamespaceModel extends UserShareBaseModel {
|
||||
namespaceId: NamespaceModel['id']
|
||||
export default class UserNamespaceModel extends UserShareBaseModel implements IUserNamespace {
|
||||
declare namespaceId: INamespace['id']
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,16 +1,27 @@
|
||||
|
||||
import AbstractModel from './abstractModel'
|
||||
import type ListModel from './list'
|
||||
import type { IList } from './list'
|
||||
|
||||
export default class UserSettingsModel extends AbstractModel {
|
||||
export interface IUserSettings {
|
||||
name: string
|
||||
emailRemindersEnabled: boolean
|
||||
discoverableByName: boolean
|
||||
discoverableByEmail: boolean
|
||||
overdueTasksRemindersEnabled: boolean
|
||||
defaultListId: undefined | ListModel['id']
|
||||
defaultListId: undefined | IList['id']
|
||||
weekStart: 0 | 1 | 2 | 3 | 4 | 5 | 6
|
||||
timezone: string
|
||||
}
|
||||
|
||||
export default class UserSettingsModel extends AbstractModel implements IUserSettings {
|
||||
declare name: string
|
||||
declare emailRemindersEnabled: boolean
|
||||
declare discoverableByName: boolean
|
||||
declare discoverableByEmail: boolean
|
||||
declare overdueTasksRemindersEnabled: boolean
|
||||
declare defaultListId: undefined | IList['id']
|
||||
declare weekStart: 0 | 1 | 2 | 3 | 4 | 5 | 6
|
||||
declare timezone: string
|
||||
|
||||
defaults() {
|
||||
return {
|
||||
|
@ -1,13 +1,21 @@
|
||||
import AbstractModel from './abstractModel'
|
||||
import type UserModel from './user'
|
||||
import {RIGHTS, type Right} from '@/models/constants/rights'
|
||||
import type { IUser } from './user'
|
||||
|
||||
export default class UserShareBaseModel extends AbstractModel {
|
||||
userId: UserModel['id']
|
||||
export interface IUserShareBase {
|
||||
userId: IUser['id']
|
||||
right: Right
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
}
|
||||
|
||||
export default class UserShareBaseModel extends AbstractModel implements IUserShareBase {
|
||||
declare userId: IUser['id']
|
||||
declare right: Right
|
||||
|
||||
created: Date
|
||||
updated: Date
|
||||
|
||||
constructor(data) {
|
||||
super(data)
|
||||
|
Reference in New Issue
Block a user