feat: update migration to populate subscriber avatar attachments

This commit is contained in:
Mohamed Marrouchi 2025-01-08 19:07:12 +01:00
parent 67831034ad
commit 9e96055a55
2 changed files with 66 additions and 5 deletions

View File

@ -15,17 +15,34 @@ import { v4 as uuidv4 } from 'uuid';
import attachmentSchema, { import attachmentSchema, {
Attachment, Attachment,
} from '@/attachment/schemas/attachment.schema'; } from '@/attachment/schemas/attachment.schema';
import { AttachmentContext, AttachmentOwnerType } from '@/attachment/types';
import blockSchema, { Block } from '@/chat/schemas/block.schema'; import blockSchema, { Block } from '@/chat/schemas/block.schema';
import messageSchema, { Message } from '@/chat/schemas/message.schema'; import messageSchema, { Message } from '@/chat/schemas/message.schema';
import subscriberSchema, { Subscriber } from '@/chat/schemas/subscriber.schema'; import subscriberSchema, { Subscriber } from '@/chat/schemas/subscriber.schema';
import { StdOutgoingAttachmentMessage } from '@/chat/schemas/types/message'; import { StdOutgoingAttachmentMessage } from '@/chat/schemas/types/message';
import contentSchema, { Content } from '@/cms/schemas/content.schema'; import contentSchema, { Content } from '@/cms/schemas/content.schema';
import { config } from '@/config'; import { config } from '@/config';
import roleSchema, { Role } from '@/user/schemas/role.schema';
import userSchema, { User } from '@/user/schemas/user.schema'; import userSchema, { User } from '@/user/schemas/user.schema';
import { moveFile, moveFiles } from '@/utils/helpers/fs'; import { moveFile, moveFiles } from '@/utils/helpers/fs';
import { MigrationAction, MigrationServices } from '../types'; import { MigrationAction, MigrationServices } from '../types';
/**
* @returns The admin user or null
*/
const getAdminUser = async () => {
const RoleModel = mongoose.model<Role>(Role.name, roleSchema);
const UserModel = mongoose.model<User>(User.name, userSchema);
const adminRole = await RoleModel.findOne({ name: 'admin' });
const user = await UserModel.findOne({ roles: [adminRole._id] }).sort({
createdAt: 'asc',
});
return user;
};
/** /**
* Updates subscriber documents with their corresponding avatar attachments * Updates subscriber documents with their corresponding avatar attachments
* and moves avatar files to a new directory. * and moves avatar files to a new directory.
@ -58,10 +75,29 @@ const populateSubscriberAvatar = async ({ logger }: MigrationServices) => {
if (attachment) { if (attachment) {
await SubscriberModel.updateOne( await SubscriberModel.updateOne(
{ _id: subscriber._id }, { _id: subscriber._id },
{ $set: { avatar: attachment._id } }, {
$set: {
avatar: attachment._id,
},
},
); );
logger.log( logger.log(
`Subscriber ${subscriber._id} avatar attachment successfully updated for `, `Subscriber ${subscriber._id} avatar attribute successfully updated`,
);
await AttachmentModel.updateOne(
{ _id: attachment._id },
{
$set: {
context: AttachmentContext.SubscriberAvatar,
ownerType: AttachmentOwnerType.Subscriber,
owner: subscriber._id,
},
},
);
logger.log(
`Subscriber ${subscriber._id} avatar attachment attributes successfully populated`,
); );
const src = resolve( const src = resolve(
@ -144,10 +180,30 @@ const unpopulateSubscriberAvatar = async ({ logger }: MigrationServices) => {
// Reset avatar to null // Reset avatar to null
await SubscriberModel.updateOne( await SubscriberModel.updateOne(
{ _id: subscriber._id }, { _id: subscriber._id },
{ $set: { avatar: null } }, {
$set: { avatar: null },
$unset: {
context: 1,
ownerType: 1,
owner: 1,
},
},
); );
logger.log( logger.log(
`Avatar attachment successfully updated for subscriber ${subscriber._id}`, `Subscriber ${subscriber._id} avatar attribute successfully reverted to null`,
);
await AttachmentModel.updateOne(
{ _id: attachment._id },
{
$unset: {
context: 1,
ownerType: 1,
owner: 1,
},
},
);
logger.log(
`Subscriber ${subscriber._id} avatar attachment attributes successfully unpopulated`,
); );
} else { } else {
logger.warn( logger.warn(
@ -407,6 +463,8 @@ const migrateAttachmentMessages = async ({
); );
}; };
const adminUser = await getAdminUser();
for await (const msg of cursor) { for await (const msg of cursor) {
try { try {
if ( if (
@ -441,6 +499,9 @@ const migrateAttachmentMessages = async ({
size: fileBuffer.length, size: fileBuffer.length,
type: response.headers['content-type'], type: response.headers['content-type'],
channel: {}, channel: {},
owner: msg.sender ? msg.sender : adminUser.id,
ownerType: msg.sender ? 'Subscriber' : 'User',
context: 'message_attachment',
}); });
if (attachment) { if (attachment) {

View File

@ -90,6 +90,6 @@ import { ValidateAccountService } from './services/validate-account.service';
PermissionController, PermissionController,
ModelController, ModelController,
], ],
exports: [UserService, PermissionService], exports: [UserService, PermissionService, ModelService],
}) })
export class UserModule {} export class UserModule {}