feat: add admin user serializer with accept invitation url

This commit is contained in:
Ali BARIN
2024-09-18 15:25:33 +00:00
committed by Faruk AYDIN
parent b02960a5ec
commit 9299948072
6 changed files with 54 additions and 4 deletions

View File

@@ -6,7 +6,7 @@ export default async (request, response) => {
const user = await User.query().insertAndFetch(await userParams(request));
await user.sendInvitationEmail();
renderObject(response, user, { status: 201 });
renderObject(response, user, { status: 201, serializer: 'AdminUser' });
};
const userParams = async (request) => {

View File

@@ -6,7 +6,7 @@ import User from '../../../../../models/user.js';
import Role from '../../../../../models/role.js';
import { createUser } from '../../../../../../test/factories/user.js';
import { createRole } from '../../../../../../test/factories/role.js';
import createUserMock from '../../../../../../test/mocks/rest/api/v1/users/create-user.js';
import createUserMock from '../../../../../../test/mocks/rest/api/v1/admin/users/create-user.js';
describe('POST /api/v1/admin/users', () => {
let currentUser, adminRole, token;

View File

@@ -180,6 +180,10 @@ class User extends Base {
},
});
static get virtualAttributes() {
return ['acceptInvitationUrl'];
}
get authorizedFlows() {
const conditions = this.can('read', 'Flow');
return conditions.isCreator ? this.$relatedQuery('flows') : Flow.query();
@@ -204,6 +208,10 @@ class User extends Base {
: Execution.query();
}
get acceptInvitationUrl() {
return `${appConfig.webAppUrl}/accept-invitation?token=${this.invitationToken}`;
}
static async authenticate(email, password) {
const user = await User.query().findOne({
email: email?.toLowerCase() || null,
@@ -362,7 +370,6 @@ class User extends Base {
await this.generateInvitationToken();
const jobName = `Invitation Email - ${this.id}`;
const acceptInvitationUrl = `${appConfig.webAppUrl}/accept-invitation?token=${this.invitationToken}`;
const jobPayload = {
email: this.email,
@@ -370,7 +377,7 @@ class User extends Base {
template: 'invitation-instructions',
params: {
fullName: this.fullName,
acceptInvitationUrl,
acceptInvitationUrl: this.acceptInvitationUrl,
},
};

View File

@@ -0,0 +1,11 @@
import userSerializer from '../user.js';
const adminUserSerializer = (user) => {
const userData = userSerializer(user);
userData.acceptInvitationUrl = user.acceptInvitationUrl;
return userData;
};
export default adminUserSerializer;

View File

@@ -16,8 +16,10 @@ import actionSerializer from './action.js';
import executionSerializer from './execution.js';
import executionStepSerializer from './execution-step.js';
import subscriptionSerializer from './subscription.ee.js';
import adminUserSerializer from './admin/user.js';
const serializers = {
AdminUser: adminUserSerializer,
User: userSerializer,
Role: roleSerializer,
Permission: permissionSerializer,

View File

@@ -0,0 +1,30 @@
import appConfig from '../../../../../../../src/config/app.js';
const createUserMock = (user) => {
const userData = {
createdAt: user.createdAt.getTime(),
email: user.email,
fullName: user.fullName,
id: user.id,
status: user.status,
updatedAt: user.updatedAt.getTime(),
acceptInvitationUrl: user.acceptInvitationUrl,
};
if (appConfig.isCloud && user.trialExpiryDate) {
userData.trialExpiryDate = user.trialExpiryDate.toISOString();
}
return {
data: userData,
meta: {
count: 1,
currentPage: null,
isArray: false,
totalPages: null,
type: 'User',
},
};
};
export default createUserMock;