@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-web-server",
3
- "version": "1.7.364",
3
+ "version": "1.7.366",
4
4
  "description": "## Phase 1",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -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
- const hasVersion = await this.db.websiteVersions.statements.select({}, { folderID: entity.folderID });
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 previous = await this.db.websiteVersions.where(entity, (p) => (x) => x.folderID === p.folderID
82
- && x.snapshotFolderID !== p.snapshotFolderID
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
+ }