0.12.1 : update user

This commit is contained in:
2025-11-12 15:49:52 +01:00
parent d64c647865
commit b8a2bc0aef
7 changed files with 111 additions and 333 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "harmony-back",
"version": "0.12.0",
"version": "0.12.1",
"private": true,
"description": "A Strapi application",
"scripts": {

View File

@@ -25,6 +25,17 @@
"videos",
"audios"
]
},
"activityType": {
"type": "enumeration",
"enum": [
"user",
"group",
"choral",
"message",
"post",
"contact"
]
}
}
}

View File

@@ -14,7 +14,7 @@
"name": "Apache 2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0.html"
},
"x-generation-date": "2025-11-11T18:08:56.370Z"
"x-generation-date": "2025-11-12T14:43:35.118Z"
},
"x-strapi-config": {
"plugins": [
@@ -15079,18 +15079,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -18343,6 +18331,17 @@
}
}
}
},
"activityType": {
"type": "string",
"enum": [
"user",
"group",
"choral",
"message",
"post",
"contact"
]
}
}
},
@@ -19414,18 +19413,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -23369,18 +23356,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -27393,18 +27368,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -31355,18 +31318,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -35058,18 +35009,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -39016,18 +38955,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -42968,18 +42895,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -46822,18 +46737,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -50663,18 +50566,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -54540,18 +54431,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -58417,18 +58296,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -62255,18 +62122,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -66274,18 +66129,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -70486,18 +70329,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -74219,18 +74050,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -78358,18 +78177,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -82192,18 +81999,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -86051,18 +85846,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -90014,18 +89797,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -93878,18 +93649,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -97951,18 +97710,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -101825,18 +101572,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -105732,18 +105467,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {
@@ -109599,18 +109322,6 @@
}
}
},
"nbFollowers": {
"type": "integer"
},
"nbFollowing": {
"type": "integer"
},
"nbPosts": {
"type": "integer"
},
"nbSaved": {
"type": "integer"
},
"choralOwner": {
"type": "object",
"properties": {

View File

@@ -73,22 +73,6 @@
"images"
]
},
"nbFollowers": {
"type": "integer",
"default": 0
},
"nbFollowing": {
"type": "integer",
"default": 0
},
"nbPosts": {
"type": "integer",
"default": 0
},
"nbSaved": {
"type": "integer",
"default": 0
},
"choralOwner": {
"type": "relation",
"relation": "oneToOne",

View File

@@ -33,12 +33,10 @@ module.exports = (plugin) => {
throw new Error("No access_token.");
}
// Get the profile.
const profile = await getProfile(provider, query);
const email = lod.toLower(profile.email);
// We need at least the mail.
if (!email) {
throw new Error("Email was not available.");
}
@@ -70,15 +68,13 @@ module.exports = (plugin) => {
throw new Error("Email is already taken.");
}
// Retrieve default role.
const defaultRole = await strapi.db
.query("plugin::users-permissions.role")
.findOne({ where: { type: advancedSettings.default_role } });
// Create the new user.
const newUser = {
...profile,
email, // overwrite with lowercased email
email,
provider,
role: defaultRole.id,
confirmed: true,
@@ -93,6 +89,73 @@ module.exports = (plugin) => {
};
};
const originalMe = plugin.controllers.user.me;
plugin.controllers.user.me = async (ctx) => {
const fullUser = await strapi.db
.query("plugin::users-permissions.user")
.findOne({
where: { id: ctx.state.user.id },
populate: true,
});
const user = ctx.state.user;
const userId = user.id;
const [
contactsCount,
groupsCount,
postsCount,
eventsCount,
followersCount,
followingCount,
] = await Promise.all([
strapi.db.query("api::contact.contact").count({
where: {
$or: [{ owner: userId }, { user: userId }],
},
}),
strapi.db.query("api::group-membership.group-membership").count({
where: {
user: userId,
role: { $in: ["owner", "member", "admin"] },
},
}),
strapi.db
.query("api::post-ownership.post-ownership")
.count({ where: { author: userId } }),
strapi.db
.query("api::event-relationship.event-relationship")
.count({ where: { author: userId } }),
strapi.db.query("api::contact.contact").count({
where: {
user: userId,
state: "follow",
},
}),
strapi.db.query("api::contact.contact").count({
where: {
owner: userId,
state: "follow",
},
}),
]);
const result = {
...JSON.parse(JSON.stringify(fullUser)),
stats: {
contacts: contactsCount,
groups: groupsCount,
posts: postsCount,
events: eventsCount,
followers: followersCount,
following: followingCount,
},
};
return result;
};
const uploadImage = async (ctx, label: string, username: string) => {
const key = `${label}Image`;
if (ctx.request.files[key]) {
@@ -122,7 +185,6 @@ module.exports = (plugin) => {
plugin.controllers.user.updateMe = async (ctx) => {
const user = ctx.state.user;
// User has to be logged in to update themselves
if (!user) {
return ctx.unauthorized();
}
@@ -139,9 +201,24 @@ module.exports = (plugin) => {
"voice",
"job",
"dob",
"phone",
"bio",
"experience",
]);
// Make sure there is no duplicate user with the same username
if (data.tags) {
newData.tags = data.tags.map((tag) => ({
text: tag.text,
}));
}
if (data.languages) {
newData.languages = data.languages.map((lang) => ({
language: lang.language,
level: lang.level,
}));
}
if (newData.username) {
const userWithSameUsername = await strapi
.query("plugin::users-permissions.user")
@@ -152,7 +229,6 @@ module.exports = (plugin) => {
}
}
// Make sure there is no duplicate user with the same email
if (newData.email) {
const userWithSameEmail = await strapi
.query("plugin::users-permissions.user")
@@ -169,9 +245,6 @@ module.exports = (plugin) => {
const avatarId = await uploadImage(ctx, "avatar", newData.username);
if (avatarId != 0) ctx.request.body.avatar = avatarId;
const backgroundId = await uploadImage(ctx, "background", newData.username);
if (backgroundId != 0) ctx.request.body.background = backgroundId;
return plugin.controllers.user.update(ctx);
};

View File

@@ -31,6 +31,9 @@ export interface GroupActivity extends Struct.ComponentSchema {
>;
activityDate: Schema.Attribute.DateTime;
activityMessage: Schema.Attribute.String;
activityType: Schema.Attribute.Enumeration<
['user', 'group', 'choral', 'message', 'post', 'contact']
>;
activityUser: Schema.Attribute.String;
};
}

View File

@@ -1889,10 +1889,6 @@ export interface PluginUsersPermissionsUser
> &
Schema.Attribute.Private;
name: Schema.Attribute.String;
nbFollowers: Schema.Attribute.Integer & Schema.Attribute.DefaultTo<0>;
nbFollowing: Schema.Attribute.Integer & Schema.Attribute.DefaultTo<0>;
nbPosts: Schema.Attribute.Integer & Schema.Attribute.DefaultTo<0>;
nbSaved: Schema.Attribute.Integer & Schema.Attribute.DefaultTo<0>;
password: Schema.Attribute.Password &
Schema.Attribute.Private &
Schema.Attribute.SetMinMaxLength<{