@wepublish/api-db-mongodb
Version:
We.publish Database adapter for mongoDB
440 lines (337 loc) • 7.29 kB
text/typescript
import {
ArticleBlock,
CommentItemType,
CommentAuthorType,
CommentRejectionReason,
CommentState,
AvailablePaymentMethod,
FocalPoint,
InvoiceItem,
MetadataProperty,
NavigationLink,
PageBlock,
PaymentProviderCustomer,
RichTextNode,
CommentRevision,
MailLogState,
PaymentState,
UserAddress,
UserOAuth2Account,
PaymentPeriodicity,
SubscriptionPeriod,
SubscriptionDeactivation,
MemberPlan,
Invoice,
SettingRestriction,
SettingName
} from '@wepublish/api'
export enum CollectionName {
Migrations = 'migrations',
PeerProfiles = 'peerProfiles',
Peers = 'peers',
Users = 'users',
UserRoles = 'users.roles',
Subscriptions = 'subscriptions',
Sessions = 'sessions',
Tokens = 'tokens',
Navigations = 'navigations',
Authors = 'authors',
Images = 'images',
Comments = 'comments',
Articles = 'articles',
ArticlesHistory = 'articles.history',
Pages = 'pages',
PagesHistory = 'pages.history',
MemberPlans = 'member.plans',
PaymentMethods = 'payment.methods',
Invoices = 'invoices',
Payments = 'payments',
MailLog = 'mail.log',
Settings = 'settings'
}
// NOTE: _id has to be of type any for insert operations not requiring _id to be provided.
export interface DBMigration {
_id: any
version: number
createdAt: Date
}
export interface DBPeerProfile {
_id: any
name: string
logoID?: string
themeColor: string
themeFontColor: string
callToActionURL: string
callToActionText: RichTextNode[]
callToActionImageURL?: string
callToActionImageID?: string
}
export interface DBPeer {
_id: any
createdAt: Date
modifiedAt: Date
name: string
slug: string
isDisabled?: boolean
hostURL: string
token: string
}
export interface DBToken {
_id: any
createdAt: Date
modifiedAt: Date
name: string
token: string
roleIDs: string[]
}
export interface DBUser {
_id: any
createdAt: Date
modifiedAt: Date
email: string
emailVerifiedAt: Date | null
name: string
firstName?: string
preferredName?: string
address?: UserAddress
password: string
oauth2Accounts: UserOAuth2Account[]
active: boolean
lastLogin: Date | null
properties: MetadataProperty[]
roleIDs: string[]
paymentProviderCustomers: PaymentProviderCustomer[]
}
export interface DBUserRole {
_id: any
createdAt: Date
modifiedAt: Date
name: string
description?: string
systemRole: boolean
permissionIDs: string[]
}
export interface DBSubscription {
_id: any
createdAt: Date
modifiedAt: Date
userID: string
memberPlanID: string
paymentPeriodicity: PaymentPeriodicity
monthlyAmount: number
autoRenew: boolean
startsAt: Date
paidUntil: Date | null
periods: SubscriptionPeriod[]
paymentMethodID: string
properties: MetadataProperty[]
deactivation: SubscriptionDeactivation | null
memberPlan?: MemberPlan
invoices?: Invoice[]
}
export interface DBSession {
_id: any
createdAt: Date
expiresAt: Date
userID: string
token: string
}
export interface DBNavigation {
_id: any
createdAt: Date
modifiedAt: Date
key: string
name: string
links: NavigationLink[]
}
export interface DBAuthor {
_id: any
createdAt: Date
modifiedAt: Date
slug: string
name: string
jobTitle?: string
imageID?: string
links: Array<{title: string; url: string}>
bio: RichTextNode[]
}
// TODO: Consider using DB schema via $jsonSchema
// export const DBUserSchema = {
// bsonType: 'object',
// additionalProperties: false,
// required: ['_id', 'email', 'password'],
// properties: {
// _id: {bsonType: 'string'},
// email: {bsonType: 'string'},
// password: {bsonType: 'string'}
// }
// }
//
// const users = await db.createCollection<v0.DBUser>(v0.CollectionName.Users, {
// validator: {
// $jsonSchema: v0.DBUserSchema
// },
// strict: true
// })
export interface DBImage {
_id: any
createdAt: Date
modifiedAt: Date
fileSize: number
extension: string
mimeType: string
format: string
width: number
height: number
filename?: string
title?: string
description?: string
tags: string[]
source?: string
link?: string
license?: string
focalPoint?: FocalPoint
}
export interface DBComment {
_id: any
createdAt: Date
modifiedAt: Date
itemID: string
itemType: CommentItemType
userID: string
revisions: CommentRevision[]
parentID?: string
state: CommentState
rejectionReason?: CommentRejectionReason
authorType: CommentAuthorType
}
export interface DBArticle {
_id: any
shared: boolean
createdAt: Date
modifiedAt: Date
draft: DBArticleRevision | null
published: DBArticleRevision | null
pending: DBArticleRevision | null
}
export interface DBArticleRevision {
revision: number
createdAt: Date
updatedAt?: Date
publishedAt?: Date
publishAt?: Date
slug: string
preTitle?: string
title: string
lead?: string
seoTitle?: string
tags: string[]
properties: MetadataProperty[]
imageID?: string
authorIDs: string[]
breaking: boolean
blocks: ArticleBlock[]
hideAuthor: boolean
socialMediaTitle?: string
socialMediaDescription?: string
socialMediaAuthorIDs: string[]
socialMediaImageID?: string
}
export interface DBArticleHistoryRevision extends DBArticleRevision {
_id: any
articleID: string
}
export interface DBPage {
_id: any
createdAt: Date
modifiedAt: Date
draft: DBPageRevision | null
published: DBPageRevision | null
pending: DBPageRevision | null
}
export interface DBPageRevision {
revision: number
createdAt: Date
updatedAt?: Date
publishedAt?: Date
publishAt?: Date
slug: string
title: string
description?: string
tags: string[]
properties: MetadataProperty[]
imageID?: string
socialMediaTitle?: string
socialMediaDescription?: string
socialMediaImageID?: string
blocks: PageBlock[]
}
export interface DBPageHistoryRevision extends DBPageRevision {
_id: any
articleID: string
}
export interface DBMemberPlan {
_id: any
createdAt: Date
modifiedAt: Date
name: string
slug: string
tags: string[]
imageID?: string
description: RichTextNode[]
active: boolean
amountPerMonthMin: number
availablePaymentMethods: AvailablePaymentMethod[]
}
export interface DBPaymentMethod {
_id: any
createdAt: Date
modifiedAt: Date
name: string
slug: string
description: string
paymentProviderID: string
active: boolean
}
export interface DBInvoice {
_id: any
createdAt: Date
modifiedAt: Date
mail: string
dueAt: Date
subscriptionID: string
description?: string
paidAt: Date | null
canceledAt: Date | null
sentReminderAt?: Date
items: InvoiceItem[]
manuallySetAsPaidByUserId?: string
}
export interface DBPayment {
_id: any
createdAt: Date
modifiedAt: Date
invoiceID: string
state: PaymentState
paymentMethodID: string
intentID?: string
intentSecret?: string
intentData?: string
paymentData?: string
}
export interface DBMailLog {
_id: any
createdAt: Date
modifiedAt: Date
recipient: string
subject: string
state: MailLogState
mailProviderID: string
mailData?: string
}
export interface DBSetting<T> {
_id: any
name: SettingName
value: T | null
settingRestriction?: SettingRestriction
}