@social-mail/social-mail-web-server 1.7.364 → 1.7.366
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/model/events/WebSiteEvents.d.ts.map +1 -1
- package/dist/server/model/events/WebSiteEvents.js +3 -15
- package/dist/server/model/events/WebSiteEvents.js.map +1 -1
- package/dist/server/model/events/WebSiteHostEvents.d.ts.map +1 -1
- package/dist/server/model/events/WebSiteHostEvents.js +3 -0
- package/dist/server/model/events/WebSiteHostEvents.js.map +1 -1
- package/dist/server/model/events/WebSiteVersionEvents.d.ts.map +1 -1
- package/dist/server/model/events/WebSiteVersionEvents.js +3 -11
- package/dist/server/model/events/WebSiteVersionEvents.js.map +1 -1
- package/dist/server/services/files/WebSiteVersionService.d.ts +12 -0
- package/dist/server/services/files/WebSiteVersionService.d.ts.map +1 -0
- package/dist/server/services/files/WebSiteVersionService.js +86 -0
- package/dist/server/services/files/WebSiteVersionService.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/server/model/events/WebSiteEvents.ts +3 -16
- package/src/server/model/events/WebSiteHostEvents.ts +5 -0
- package/src/server/model/events/WebSiteVersionEvents.ts +3 -10
- package/src/server/services/files/WebSiteVersionService.ts +85 -0
package/package.json
CHANGED
|
@@ -20,6 +20,7 @@ import CopyTemplateWorkflow from "../../workflows/site/CopyTemplateWorkflow.js";
|
|
|
20
20
|
import DeleteWebsiteWorkflow from "../../workflows/web-site/DeleteWebSiteWorkflow.js";
|
|
21
21
|
import SnapshotService from "../../services/files/SnapshotService.js";
|
|
22
22
|
import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
|
|
23
|
+
import WebSiteVersionService from "../../services/files/WebSiteVersionService.js";
|
|
23
24
|
|
|
24
25
|
export default class WebSiteEvents extends AuthenticatedEvents<WebSite> {
|
|
25
26
|
|
|
@@ -97,22 +98,8 @@ export default class WebSiteEvents extends AuthenticatedEvents<WebSite> {
|
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
async ensureSnapshot(entity: WebSite) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (hasVersion) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const snapshotService = ServiceProvider.resolve(this, SnapshotService);
|
|
107
|
-
const snapshot = await snapshotService.createSnapshot(entity.folderID, this.sessionUser);
|
|
108
|
-
const version = this.db.websiteVersions.add({
|
|
109
|
-
folderID: entity.folderID
|
|
110
|
-
});
|
|
111
|
-
version.snapshotFolderID = snapshot.appFileID;
|
|
112
|
-
version.dateCreated = DateTime.now;
|
|
113
|
-
version.name = "1.0.0";
|
|
114
|
-
|
|
115
|
-
await this.db.saveChanges();
|
|
101
|
+
const vs = ServiceProvider.resolve(this, WebSiteVersionService);
|
|
102
|
+
await vs.ensureNewVersion(entity);
|
|
116
103
|
}
|
|
117
104
|
|
|
118
105
|
async copyTemplate(entity: WebSite) {
|
|
@@ -8,6 +8,8 @@ import EmailAddressService from "../../services/EmailAddressService.js";
|
|
|
8
8
|
import SyncDnsZoneRecordsWorkflow from "../../workflows/dns/SyncDnsZoneRecordsWorkflow.js";
|
|
9
9
|
import { WebSiteHost } from "../entities/WebSiteHost.js";
|
|
10
10
|
import AuthenticatedEvents from "./AuthenticatedEvents.js";
|
|
11
|
+
import SocialMailContext from "../SocialMailContext.js";
|
|
12
|
+
import WebSiteVersionService from "../../services/files/WebSiteVersionService.js";
|
|
11
13
|
|
|
12
14
|
export class WebSiteHostEvents extends AuthenticatedEvents<WebSiteHost> {
|
|
13
15
|
|
|
@@ -42,6 +44,9 @@ export class WebSiteHostEvents extends AuthenticatedEvents<WebSiteHost> {
|
|
|
42
44
|
const zoneID = await eas.getOrCreateDomain(domain);
|
|
43
45
|
|
|
44
46
|
await SyncDnsZoneRecordsWorkflow.enqueue(wc, zoneID);
|
|
47
|
+
|
|
48
|
+
const vs = ServiceProvider.resolve(this, WebSiteVersionService);
|
|
49
|
+
await vs.ensureNewVersionForRemote(entity.folderID);
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
includeFilter(query: IEntityQuery<WebSiteHost>, type?: any, key?: string) {
|
|
@@ -10,6 +10,7 @@ import * as semver from "semver";
|
|
|
10
10
|
import { ForeignKeyFilter } from "@entity-access/entity-access/dist/model/events/EntityEvents.js";
|
|
11
11
|
import FileDeleteService from "../../services/files/FileDeleteService.js";
|
|
12
12
|
import SnapshotService from "../../services/files/SnapshotService.js";
|
|
13
|
+
import WebSiteVersionService from "../../services/files/WebSiteVersionService.js";
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
|
|
@@ -78,16 +79,8 @@ export class WebSiteVersionEvents extends AuthenticatedEvents<WebSiteVersion> {
|
|
|
78
79
|
entity.authorID = this.sessionUser.userID;
|
|
79
80
|
}
|
|
80
81
|
if (!entity.name) {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
)
|
|
84
|
-
.orderByDescending(void 0, (p) => (x) => x.dateCreated)
|
|
85
|
-
.first();
|
|
86
|
-
if (!previous) {
|
|
87
|
-
entity.name = "1.0.0";
|
|
88
|
-
} else {
|
|
89
|
-
entity.name = semver.inc(previous.name, entity.versionType || "patch");
|
|
90
|
-
}
|
|
82
|
+
const vs = ServiceProvider.resolve(this, WebSiteVersionService);
|
|
83
|
+
entity.name = await vs.getNewVersion(entity.folderID, entity.versionType || "patch");
|
|
91
84
|
}
|
|
92
85
|
}
|
|
93
86
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import Inject, { RegisterScoped } from "@entity-access/entity-access/dist/di/di.js";
|
|
2
|
+
import * as semver from "semver";
|
|
3
|
+
import SocialMailContext from "../../model/SocialMailContext.js";
|
|
4
|
+
import { WebSiteVersion } from "../../model/entities/WebSiteVersion.js";
|
|
5
|
+
import { SessionUser } from "@entity-access/server-pages/dist/core/SessionUser.js";
|
|
6
|
+
import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
|
|
7
|
+
import WebSite from "../../model/entities/WebSite.js";
|
|
8
|
+
|
|
9
|
+
@RegisterScoped
|
|
10
|
+
export default class WebSiteVersionService {
|
|
11
|
+
|
|
12
|
+
@Inject db: SocialMailContext;
|
|
13
|
+
|
|
14
|
+
@Inject user: SessionUser;
|
|
15
|
+
|
|
16
|
+
async getNewVersion(folderID, versionType: semver.ReleaseType = "patch") {
|
|
17
|
+
const previous = await this.db.websiteVersions.where({ folderID }, (p) => (x) => x.folderID === p.folderID)
|
|
18
|
+
.orderByDescending(void 0, (p) => (x) => x.dateCreated)
|
|
19
|
+
.first();
|
|
20
|
+
if (!previous) {
|
|
21
|
+
return "1.0.0";
|
|
22
|
+
} else {
|
|
23
|
+
return semver.inc(previous.name, versionType);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async ensureNewVersionForRemote(folderID) {
|
|
28
|
+
const site = await this.db.websiteFolders.where({ folderID }, (p) => (x) =>
|
|
29
|
+
x.folderID === p.folderID
|
|
30
|
+
&& x.remoteUrl !== null)
|
|
31
|
+
.include((x) => x.folder)
|
|
32
|
+
.first();
|
|
33
|
+
if (!site) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
return this.ensureNewVersion(site);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async ensureNewVersion(site: WebSite) {
|
|
40
|
+
|
|
41
|
+
const dateCreated = DateTime.now;
|
|
42
|
+
|
|
43
|
+
const { folderID } = site;
|
|
44
|
+
|
|
45
|
+
const creatorID = this.user.userID;
|
|
46
|
+
|
|
47
|
+
const snapshotRoot = await this.db.appFiles.statements.insert({
|
|
48
|
+
... site.folder,
|
|
49
|
+
contentType: "snapshot",
|
|
50
|
+
appFileID: void 0,
|
|
51
|
+
parentID: null,
|
|
52
|
+
creatorID,
|
|
53
|
+
path: null,
|
|
54
|
+
dateCreated,
|
|
55
|
+
dateUpdated: dateCreated,
|
|
56
|
+
fileSize: 0,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const path = `${snapshotRoot.appFileID}/`;
|
|
60
|
+
snapshotRoot.path = path;
|
|
61
|
+
|
|
62
|
+
await this.db.appFiles.statements.update({
|
|
63
|
+
path
|
|
64
|
+
}, {
|
|
65
|
+
appFileID: snapshotRoot.appFileID
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
const version = await this.db.websiteVersions.statements.insert({
|
|
70
|
+
authorID: creatorID,
|
|
71
|
+
dateCreated,
|
|
72
|
+
folderID,
|
|
73
|
+
snapshotFolderID: snapshotRoot.appFileID
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// delete previous versions...
|
|
77
|
+
await this.db.appFiles
|
|
78
|
+
.asQuery()
|
|
79
|
+
.delete(version, (p) => (x) => x.websiteVersions.some((w) => w.folderID === p.folderID && w.snapshotFolderID !== p.snapshotFolderID));
|
|
80
|
+
|
|
81
|
+
await this.db.websiteVersions
|
|
82
|
+
.asQuery()
|
|
83
|
+
.delete(version, (p) => (x) => x.folderID === p.folderID && x.snapshotFolderID !== p.snapshotFolderID);
|
|
84
|
+
}
|
|
85
|
+
}
|