diff --git a/.gitignore b/.gitignore index e427ff3..d0eb167 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ node_modules/ */node_modules/ */build/ + +**/node_modules/ +**/build/ +.DS_Store +.env \ No newline at end of file diff --git a/app-shell/src/_schema.json b/app-shell/src/_schema.json index 0962767..31aafa0 100644 --- a/app-shell/src/_schema.json +++ b/app-shell/src/_schema.json @@ -1,5 +1,4 @@ - - { - "Initial version": "{\"iv\":\"s87wxylqs04i+oyL\",\"encryptedData\":\"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\"}" -} + "Initial version": "{\"iv\":\"s87wxylqs04i+oyL\",\"encryptedData\":\"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\"}", + "Updated via schema editor on 2025-06-16 14:32": "{\"iv\":\"x96A5ya2V3WgGy3J\",\"encryptedData\":\"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\"}" +} \ No newline at end of file diff --git a/backend/src/db/api/songs.js b/backend/src/db/api/songs.js index 8617433..8030a7a 100644 --- a/backend/src/db/api/songs.js +++ b/backend/src/db/api/songs.js @@ -190,10 +190,6 @@ module.exports = class SongsDBApi { const output = songs.get({ plain: true }); - output.comments_song = await songs.getComments_song({ - transaction, - }); - output.duets_original_song = await songs.getDuets_original_song({ transaction, }); @@ -202,6 +198,10 @@ module.exports = class SongsDBApi { transaction, }); + output.comments_song = await songs.getComments_song({ + transaction, + }); + output.reports_reported_content = await songs.getReports_reported_content({ transaction, }); diff --git a/backend/src/db/api/users.js b/backend/src/db/api/users.js index 5f9d3c2..7448ae6 100644 --- a/backend/src/db/api/users.js +++ b/backend/src/db/api/users.js @@ -267,7 +267,7 @@ module.exports = class UsersDBApi { const output = users.get({ plain: true }); - output.comments_user = await users.getComments_user({ + output.songs_artist = await users.getSongs_artist({ transaction, }); @@ -275,7 +275,7 @@ module.exports = class UsersDBApi { transaction, }); - output.likes_user = await users.getLikes_user({ + output.playlists_creator = await users.getPlaylists_creator({ transaction, }); @@ -283,15 +283,11 @@ module.exports = class UsersDBApi { transaction, }); - output.playlists_creator = await users.getPlaylists_creator({ + output.likes_user = await users.getLikes_user({ transaction, }); - output.reports_reporter = await users.getReports_reporter({ - transaction, - }); - - output.songs_artist = await users.getSongs_artist({ + output.comments_user = await users.getComments_user({ transaction, }); @@ -303,6 +299,10 @@ module.exports = class UsersDBApi { transaction, }); + output.reports_reporter = await users.getReports_reporter({ + transaction, + }); + output.avatar = await users.getAvatar({ transaction, }); diff --git a/backend/src/db/migrations/1750084314647.js b/backend/src/db/migrations/1750084314647.js new file mode 100644 index 0000000..e6bfba3 --- /dev/null +++ b/backend/src/db/migrations/1750084314647.js @@ -0,0 +1,36 @@ +module.exports = { + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async up(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + }, + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async down(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + }, +}; diff --git a/backend/src/db/models/songs.js b/backend/src/db/models/songs.js index 62a8b87..22c19f7 100644 --- a/backend/src/db/models/songs.js +++ b/backend/src/db/models/songs.js @@ -66,14 +66,6 @@ module.exports = function (sequelize, DataTypes) { /// loop through entities and it's fields, and if ref === current e[name] and create relation has many on parent entity - db.songs.hasMany(db.comments, { - as: 'comments_song', - foreignKey: { - name: 'songId', - }, - constraints: false, - }); - db.songs.hasMany(db.duets, { as: 'duets_original_song', foreignKey: { @@ -90,6 +82,14 @@ module.exports = function (sequelize, DataTypes) { constraints: false, }); + db.songs.hasMany(db.comments, { + as: 'comments_song', + foreignKey: { + name: 'songId', + }, + constraints: false, + }); + db.songs.hasMany(db.reports, { as: 'reports_reported_content', foreignKey: { diff --git a/backend/src/db/models/users.js b/backend/src/db/models/users.js index 681bb7a..cafcc0b 100644 --- a/backend/src/db/models/users.js +++ b/backend/src/db/models/users.js @@ -102,10 +102,10 @@ module.exports = function (sequelize, DataTypes) { /// loop through entities and it's fields, and if ref === current e[name] and create relation has many on parent entity - db.users.hasMany(db.comments, { - as: 'comments_user', + db.users.hasMany(db.songs, { + as: 'songs_artist', foreignKey: { - name: 'userId', + name: 'artistId', }, constraints: false, }); @@ -118,10 +118,10 @@ module.exports = function (sequelize, DataTypes) { constraints: false, }); - db.users.hasMany(db.likes, { - as: 'likes_user', + db.users.hasMany(db.playlists, { + as: 'playlists_creator', foreignKey: { - name: 'userId', + name: 'creatorId', }, constraints: false, }); @@ -134,26 +134,18 @@ module.exports = function (sequelize, DataTypes) { constraints: false, }); - db.users.hasMany(db.playlists, { - as: 'playlists_creator', + db.users.hasMany(db.likes, { + as: 'likes_user', foreignKey: { - name: 'creatorId', + name: 'userId', }, constraints: false, }); - db.users.hasMany(db.reports, { - as: 'reports_reporter', + db.users.hasMany(db.comments, { + as: 'comments_user', foreignKey: { - name: 'reporterId', - }, - constraints: false, - }); - - db.users.hasMany(db.songs, { - as: 'songs_artist', - foreignKey: { - name: 'artistId', + name: 'userId', }, constraints: false, }); @@ -174,6 +166,14 @@ module.exports = function (sequelize, DataTypes) { constraints: false, }); + db.users.hasMany(db.reports, { + as: 'reports_reporter', + foreignKey: { + name: 'reporterId', + }, + constraints: false, + }); + //end loop db.users.belongsTo(db.roles, { diff --git a/backend/src/db/seeders/20200430130760-user-roles.js b/backend/src/db/seeders/20200430130760-user-roles.js index 1c2e408..c479ed0 100644 --- a/backend/src/db/seeders/20200430130760-user-roles.js +++ b/backend/src/db/seeders/20200430130760-user-roles.js @@ -100,15 +100,15 @@ module.exports = { const entities = [ 'users', - 'comments', - 'duets', - 'likes', - 'notifications', - 'playlists', - 'reports', 'songs', + 'duets', + 'playlists', + 'notifications', + 'likes', + 'comments', 'tips', 'roles', + 'reports', 'permissions', , ]; @@ -232,112 +232,105 @@ primary key ("roles_permissionsId", "permissionId") createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('CREATE_COMMENTS'), + permissionId: getId('CREATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('READ_COMMENTS'), + permissionId: getId('READ_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('UPDATE_COMMENTS'), + permissionId: getId('UPDATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('DELETE_COMMENTS'), + permissionId: getId('DELETE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('CREATE_COMMENTS'), + permissionId: getId('CREATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('READ_COMMENTS'), + permissionId: getId('READ_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('UPDATE_COMMENTS'), + permissionId: getId('UPDATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('DELETE_COMMENTS'), + permissionId: getId('DELETE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('CREATE_COMMENTS'), + permissionId: getId('READ_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('READ_COMMENTS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('UPDATE_COMMENTS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('DELETE_COMMENTS'), + permissionId: getId('UPDATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('READ_COMMENTS'), + permissionId: getId('CREATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('UPDATE_COMMENTS'), + permissionId: getId('READ_SONGS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('VerifiedArtist'), + permissionId: getId('UPDATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('READ_COMMENTS'), + permissionId: getId('READ_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('UPDATE_COMMENTS'), + permissionId: getId('UPDATE_SONGS'), }, { @@ -449,98 +442,105 @@ primary key ("roles_permissionsId", "permissionId") createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('CREATE_LIKES'), + permissionId: getId('CREATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('READ_LIKES'), + permissionId: getId('READ_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('UPDATE_LIKES'), + permissionId: getId('UPDATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('DELETE_LIKES'), + permissionId: getId('DELETE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('CREATE_LIKES'), + permissionId: getId('CREATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('READ_LIKES'), + permissionId: getId('READ_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('UPDATE_LIKES'), + permissionId: getId('UPDATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('DELETE_LIKES'), + permissionId: getId('DELETE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('READ_LIKES'), + permissionId: getId('READ_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('UPDATE_LIKES'), + permissionId: getId('UPDATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('READ_LIKES'), + permissionId: getId('CREATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('UPDATE_LIKES'), + permissionId: getId('READ_PLAYLISTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('VerifiedArtist'), + permissionId: getId('UPDATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('READ_LIKES'), + permissionId: getId('READ_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('UPDATE_LIKES'), + permissionId: getId('UPDATE_PLAYLISTS'), }, { @@ -631,322 +631,210 @@ primary key ("roles_permissionsId", "permissionId") createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('CREATE_PLAYLISTS'), + permissionId: getId('CREATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('READ_PLAYLISTS'), + permissionId: getId('READ_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('UPDATE_PLAYLISTS'), + permissionId: getId('UPDATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('DELETE_PLAYLISTS'), + permissionId: getId('DELETE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('CREATE_PLAYLISTS'), + permissionId: getId('CREATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('READ_PLAYLISTS'), + permissionId: getId('READ_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('UPDATE_PLAYLISTS'), + permissionId: getId('UPDATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('DELETE_PLAYLISTS'), + permissionId: getId('DELETE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('READ_PLAYLISTS'), + permissionId: getId('READ_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('UPDATE_PLAYLISTS'), + permissionId: getId('UPDATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('CREATE_PLAYLISTS'), + permissionId: getId('READ_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('READ_PLAYLISTS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('UPDATE_PLAYLISTS'), + permissionId: getId('UPDATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('READ_PLAYLISTS'), + permissionId: getId('READ_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('UPDATE_PLAYLISTS'), + permissionId: getId('UPDATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('CREATE_REPORTS'), + permissionId: getId('CREATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('READ_REPORTS'), + permissionId: getId('READ_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('UPDATE_REPORTS'), + permissionId: getId('UPDATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('MusicManager'), - permissionId: getId('DELETE_REPORTS'), + permissionId: getId('DELETE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('CREATE_REPORTS'), + permissionId: getId('CREATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('READ_REPORTS'), + permissionId: getId('READ_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('UPDATE_REPORTS'), + permissionId: getId('UPDATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('ContentCurator'), - permissionId: getId('DELETE_REPORTS'), + permissionId: getId('DELETE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('CREATE_REPORTS'), + permissionId: getId('CREATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('READ_REPORTS'), + permissionId: getId('READ_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('UPDATE_REPORTS'), + permissionId: getId('UPDATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('DELETE_REPORTS'), + permissionId: getId('DELETE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('READ_REPORTS'), + permissionId: getId('READ_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('UPDATE_REPORTS'), + permissionId: getId('UPDATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('READ_REPORTS'), + permissionId: getId('READ_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Listener'), - permissionId: getId('UPDATE_REPORTS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('MusicManager'), - permissionId: getId('CREATE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('MusicManager'), - permissionId: getId('READ_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('MusicManager'), - permissionId: getId('UPDATE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('MusicManager'), - permissionId: getId('DELETE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('ContentCurator'), - permissionId: getId('CREATE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('ContentCurator'), - permissionId: getId('READ_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('ContentCurator'), - permissionId: getId('UPDATE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('ContentCurator'), - permissionId: getId('DELETE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('READ_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('CommunityModerator'), - permissionId: getId('UPDATE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('CREATE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('READ_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('VerifiedArtist'), - permissionId: getId('UPDATE_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('Listener'), - permissionId: getId('READ_SONGS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('Listener'), - permissionId: getId('UPDATE_SONGS'), + permissionId: getId('UPDATE_COMMENTS'), }, { @@ -1033,6 +921,118 @@ primary key ("roles_permissionsId", "permissionId") permissionId: getId('UPDATE_TIPS'), }, + { + createdAt, + updatedAt, + roles_permissionsId: getId('MusicManager'), + permissionId: getId('CREATE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('MusicManager'), + permissionId: getId('READ_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('MusicManager'), + permissionId: getId('UPDATE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('MusicManager'), + permissionId: getId('DELETE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('ContentCurator'), + permissionId: getId('CREATE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('ContentCurator'), + permissionId: getId('READ_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('ContentCurator'), + permissionId: getId('UPDATE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('ContentCurator'), + permissionId: getId('DELETE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('CommunityModerator'), + permissionId: getId('CREATE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('CommunityModerator'), + permissionId: getId('READ_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('CommunityModerator'), + permissionId: getId('UPDATE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('CommunityModerator'), + permissionId: getId('DELETE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('VerifiedArtist'), + permissionId: getId('READ_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('VerifiedArtist'), + permissionId: getId('UPDATE_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('Listener'), + permissionId: getId('READ_REPORTS'), + }, + + { + createdAt, + updatedAt, + roles_permissionsId: getId('Listener'), + permissionId: getId('UPDATE_REPORTS'), + }, + { createdAt, updatedAt, @@ -1097,25 +1097,25 @@ primary key ("roles_permissionsId", "permissionId") createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('CREATE_COMMENTS'), + permissionId: getId('CREATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('READ_COMMENTS'), + permissionId: getId('READ_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('UPDATE_COMMENTS'), + permissionId: getId('UPDATE_SONGS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('DELETE_COMMENTS'), + permissionId: getId('DELETE_SONGS'), }, { @@ -1147,25 +1147,25 @@ primary key ("roles_permissionsId", "permissionId") createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('CREATE_LIKES'), + permissionId: getId('CREATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('READ_LIKES'), + permissionId: getId('READ_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('UPDATE_LIKES'), + permissionId: getId('UPDATE_PLAYLISTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('DELETE_LIKES'), + permissionId: getId('DELETE_PLAYLISTS'), }, { @@ -1197,75 +1197,50 @@ primary key ("roles_permissionsId", "permissionId") createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('CREATE_PLAYLISTS'), + permissionId: getId('CREATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('READ_PLAYLISTS'), + permissionId: getId('READ_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('UPDATE_PLAYLISTS'), + permissionId: getId('UPDATE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('DELETE_PLAYLISTS'), + permissionId: getId('DELETE_LIKES'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('CREATE_REPORTS'), + permissionId: getId('CREATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('READ_REPORTS'), + permissionId: getId('READ_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('UPDATE_REPORTS'), + permissionId: getId('UPDATE_COMMENTS'), }, { createdAt, updatedAt, roles_permissionsId: getId('Administrator'), - permissionId: getId('DELETE_REPORTS'), - }, - - { - createdAt, - updatedAt, - roles_permissionsId: getId('Administrator'), - permissionId: getId('CREATE_SONGS'), - }, - { - createdAt, - updatedAt, - roles_permissionsId: getId('Administrator'), - permissionId: getId('READ_SONGS'), - }, - { - createdAt, - updatedAt, - roles_permissionsId: getId('Administrator'), - permissionId: getId('UPDATE_SONGS'), - }, - { - createdAt, - updatedAt, - roles_permissionsId: getId('Administrator'), - permissionId: getId('DELETE_SONGS'), + permissionId: getId('DELETE_COMMENTS'), }, { @@ -1318,6 +1293,31 @@ primary key ("roles_permissionsId", "permissionId") permissionId: getId('DELETE_ROLES'), }, + { + createdAt, + updatedAt, + roles_permissionsId: getId('Administrator'), + permissionId: getId('CREATE_REPORTS'), + }, + { + createdAt, + updatedAt, + roles_permissionsId: getId('Administrator'), + permissionId: getId('READ_REPORTS'), + }, + { + createdAt, + updatedAt, + roles_permissionsId: getId('Administrator'), + permissionId: getId('UPDATE_REPORTS'), + }, + { + createdAt, + updatedAt, + roles_permissionsId: getId('Administrator'), + permissionId: getId('DELETE_REPORTS'), + }, + { createdAt, updatedAt, diff --git a/backend/src/db/seeders/20231127130745-sample-data.js b/backend/src/db/seeders/20231127130745-sample-data.js index 583f13d..3e2fbe8 100644 --- a/backend/src/db/seeders/20231127130745-sample-data.js +++ b/backend/src/db/seeders/20231127130745-sample-data.js @@ -1,51 +1,101 @@ const db = require('../models'); const Users = db.users; -const Comments = db.comments; +const Songs = db.songs; const Duets = db.duets; -const Likes = db.likes; +const Playlists = db.playlists; const Notifications = db.notifications; -const Playlists = db.playlists; +const Likes = db.likes; -const Reports = db.reports; - -const Songs = db.songs; +const Comments = db.comments; const Tips = db.tips; -const CommentsData = [ +const Reports = db.reports; + +const SongsData = [ { - // type code here for "relation_one" field + title: 'Summer Vibes', + + description: 'A catchy summer tune.', // type code here for "relation_one" field - content: 'Love this track!', + genre: 'rock', - comment_date: new Date('2023-07-02T00:00:00Z'), + release_date: new Date('2023-06-21T00:00:00Z'), + + // type code here for "files" field + + // type code here for "relation_many" field }, { - // type code here for "relation_one" field + title: 'Rock Anthem', + + description: 'An energetic rock song.', // type code here for "relation_one" field - content: 'Great energy!', + genre: 'pop', - comment_date: new Date('2023-07-21T00:00:00Z'), + release_date: new Date('2023-07-15T00:00:00Z'), + + // type code here for "files" field + + // type code here for "relation_many" field }, { - // type code here for "relation_one" field + title: 'Jazz Nights', + + description: 'Smooth jazz for relaxing evenings.', // type code here for "relation_one" field - content: 'So relaxing.', + genre: 'jazz', - comment_date: new Date('2023-08-16T00:00:00Z'), + release_date: new Date('2023-08-10T00:00:00Z'), + + // type code here for "files" field + + // type code here for "relation_many" field + }, + + { + title: 'Classical Dreams', + + description: 'A beautiful classical piece.', + + // type code here for "relation_one" field + + genre: 'jazz', + + release_date: new Date('2023-09-05T00:00:00Z'), + + // type code here for "files" field + + // type code here for "relation_many" field + }, + + { + title: 'Hip Hop Beats', + + description: 'Groovy hip hop track.', + + // type code here for "relation_one" field + + genre: 'hiphop', + + release_date: new Date('2023-10-01T00:00:00Z'), + + // type code here for "files" field + + // type code here for "relation_many" field }, ]; @@ -79,15 +129,15 @@ const DuetsData = [ duet_date: new Date('2023-08-15T00:00:00Z'), }, -]; -const LikesData = [ { // type code here for "relation_one" field // type code here for "relation_one" field - like_date: new Date('2023-07-03T00:00:00Z'), + // type code here for "files" field + + duet_date: new Date('2023-09-10T00:00:00Z'), }, { @@ -95,47 +145,9 @@ const LikesData = [ // type code here for "relation_one" field - like_date: new Date('2023-07-22T00:00:00Z'), - }, + // type code here for "files" field - { - // type code here for "relation_one" field - - // type code here for "relation_one" field - - like_date: new Date('2023-08-17T00:00:00Z'), - }, -]; - -const NotificationsData = [ - { - // type code here for "relation_one" field - - message: "Your song 'Summer Vibes' got a new like!", - - read: false, - - notification_date: new Date('2023-07-03T00:00:00Z'), - }, - - { - // type code here for "relation_one" field - - message: 'You have a new follower!', - - read: false, - - notification_date: new Date('2023-07-23T00:00:00Z'), - }, - - { - // type code here for "relation_one" field - - message: 'Your duet is live!', - - read: true, - - notification_date: new Date('2023-08-18T00:00:00Z'), + duet_date: new Date('2023-10-05T00:00:00Z'), }, ]; @@ -163,87 +175,167 @@ const PlaylistsData = [ // type code here for "relation_many" field }, -]; -const ReportsData = [ { - // type code here for "relation_one" field + name: 'Classical Collection', // type code here for "relation_one" field - reason: 'Inappropriate lyrics', - - report_date: new Date('2023-07-05T00:00:00Z'), + // type code here for "relation_many" field }, { - // type code here for "relation_one" field + name: 'Hip Hop Vibes', // type code here for "relation_one" field - reason: 'Offensive content', - - report_date: new Date('2023-07-25T00:00:00Z'), - }, - - { - // type code here for "relation_one" field - - // type code here for "relation_one" field - - reason: 'Copyright issue', - - report_date: new Date('2023-08-20T00:00:00Z'), + // type code here for "relation_many" field }, ]; -const SongsData = [ +const NotificationsData = [ { - title: 'Summer Vibes', - - description: 'A catchy summer tune.', - // type code here for "relation_one" field - genre: 'rock', + message: "Your song 'Summer Vibes' got a new like!", - release_date: new Date('2023-06-21T00:00:00Z'), + read: false, - // type code here for "files" field - - // type code here for "relation_many" field + notification_date: new Date('2023-07-03T00:00:00Z'), }, { - title: 'Rock Anthem', - - description: 'An energetic rock song.', - // type code here for "relation_one" field - genre: 'rock', + message: 'You have a new follower!', - release_date: new Date('2023-07-15T00:00:00Z'), + read: true, - // type code here for "files" field - - // type code here for "relation_many" field + notification_date: new Date('2023-07-23T00:00:00Z'), }, { - title: 'Jazz Nights', + // type code here for "relation_one" field - description: 'Smooth jazz for relaxing evenings.', + message: 'Your duet is live!', + + read: true, + + notification_date: new Date('2023-08-18T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + message: 'New comment on your song.', + + read: false, + + notification_date: new Date('2023-09-13T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + message: 'You received a tip!', + + read: true, + + notification_date: new Date('2023-10-08T00:00:00Z'), + }, +]; + +const LikesData = [ + { + // type code here for "relation_one" field // type code here for "relation_one" field - genre: 'hiphop', + like_date: new Date('2023-07-03T00:00:00Z'), + }, - release_date: new Date('2023-08-10T00:00:00Z'), + { + // type code here for "relation_one" field - // type code here for "files" field + // type code here for "relation_one" field - // type code here for "relation_many" field + like_date: new Date('2023-07-22T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + like_date: new Date('2023-08-17T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + like_date: new Date('2023-09-12T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + like_date: new Date('2023-10-07T00:00:00Z'), + }, +]; + +const CommentsData = [ + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + content: 'Love this track!', + + comment_date: new Date('2023-07-02T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + content: 'Great energy!', + + comment_date: new Date('2023-07-21T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + content: 'So relaxing.', + + comment_date: new Date('2023-08-16T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + content: 'Beautiful piece.', + + comment_date: new Date('2023-09-11T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + content: 'Awesome beats!', + + comment_date: new Date('2023-10-06T00:00:00Z'), }, ]; @@ -277,79 +369,140 @@ const TipsData = [ tip_date: new Date('2023-08-19T00:00:00Z'), }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + amount: 15, + + tip_date: new Date('2023-09-14T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + amount: 20, + + tip_date: new Date('2023-10-09T00:00:00Z'), + }, +]; + +const ReportsData = [ + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + reason: 'Inappropriate lyrics', + + report_date: new Date('2023-07-05T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + reason: 'Offensive content', + + report_date: new Date('2023-07-25T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + reason: 'Copyright issue', + + report_date: new Date('2023-08-20T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + reason: 'Spam', + + report_date: new Date('2023-09-15T00:00:00Z'), + }, + + { + // type code here for "relation_one" field + + // type code here for "relation_one" field + + reason: 'Hate speech', + + report_date: new Date('2023-10-10T00:00:00Z'), + }, ]; // Similar logic for "relation_many" -async function associateCommentWithSong() { - const relatedSong0 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), +async function associateSongWithArtist() { + const relatedArtist0 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), }); - const Comment0 = await Comments.findOne({ + const Song0 = await Songs.findOne({ order: [['id', 'ASC']], offset: 0, }); - if (Comment0?.setSong) { - await Comment0.setSong(relatedSong0); + if (Song0?.setArtist) { + await Song0.setArtist(relatedArtist0); } - const relatedSong1 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), + const relatedArtist1 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), }); - const Comment1 = await Comments.findOne({ + const Song1 = await Songs.findOne({ order: [['id', 'ASC']], offset: 1, }); - if (Comment1?.setSong) { - await Comment1.setSong(relatedSong1); + if (Song1?.setArtist) { + await Song1.setArtist(relatedArtist1); } - const relatedSong2 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), + const relatedArtist2 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), }); - const Comment2 = await Comments.findOne({ + const Song2 = await Songs.findOne({ order: [['id', 'ASC']], offset: 2, }); - if (Comment2?.setSong) { - await Comment2.setSong(relatedSong2); + if (Song2?.setArtist) { + await Song2.setArtist(relatedArtist2); + } + + const relatedArtist3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Song3 = await Songs.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Song3?.setArtist) { + await Song3.setArtist(relatedArtist3); + } + + const relatedArtist4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Song4 = await Songs.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Song4?.setArtist) { + await Song4.setArtist(relatedArtist4); } } -async function associateCommentWithUser() { - const relatedUser0 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), - }); - const Comment0 = await Comments.findOne({ - order: [['id', 'ASC']], - offset: 0, - }); - if (Comment0?.setUser) { - await Comment0.setUser(relatedUser0); - } - - const relatedUser1 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), - }); - const Comment1 = await Comments.findOne({ - order: [['id', 'ASC']], - offset: 1, - }); - if (Comment1?.setUser) { - await Comment1.setUser(relatedUser1); - } - - const relatedUser2 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), - }); - const Comment2 = await Comments.findOne({ - order: [['id', 'ASC']], - offset: 2, - }); - if (Comment2?.setUser) { - await Comment2.setUser(relatedUser2); - } -} +// Similar logic for "relation_many" async function associateDuetWithOriginal_song() { const relatedOriginal_song0 = await Songs.findOne({ @@ -384,6 +537,28 @@ async function associateDuetWithOriginal_song() { if (Duet2?.setOriginal_song) { await Duet2.setOriginal_song(relatedOriginal_song2); } + + const relatedOriginal_song3 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Duet3 = await Duets.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Duet3?.setOriginal_song) { + await Duet3.setOriginal_song(relatedOriginal_song3); + } + + const relatedOriginal_song4 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Duet4 = await Duets.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Duet4?.setOriginal_song) { + await Duet4.setOriginal_song(relatedOriginal_song4); + } } async function associateDuetWithCollaborator() { @@ -419,110 +594,27 @@ async function associateDuetWithCollaborator() { if (Duet2?.setCollaborator) { await Duet2.setCollaborator(relatedCollaborator2); } -} -async function associateLikeWithSong() { - const relatedSong0 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), - }); - const Like0 = await Likes.findOne({ - order: [['id', 'ASC']], - offset: 0, - }); - if (Like0?.setSong) { - await Like0.setSong(relatedSong0); - } - - const relatedSong1 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), - }); - const Like1 = await Likes.findOne({ - order: [['id', 'ASC']], - offset: 1, - }); - if (Like1?.setSong) { - await Like1.setSong(relatedSong1); - } - - const relatedSong2 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), - }); - const Like2 = await Likes.findOne({ - order: [['id', 'ASC']], - offset: 2, - }); - if (Like2?.setSong) { - await Like2.setSong(relatedSong2); - } -} - -async function associateLikeWithUser() { - const relatedUser0 = await Users.findOne({ + const relatedCollaborator3 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); - const Like0 = await Likes.findOne({ + const Duet3 = await Duets.findOne({ order: [['id', 'ASC']], - offset: 0, + offset: 3, }); - if (Like0?.setUser) { - await Like0.setUser(relatedUser0); + if (Duet3?.setCollaborator) { + await Duet3.setCollaborator(relatedCollaborator3); } - const relatedUser1 = await Users.findOne({ + const relatedCollaborator4 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); - const Like1 = await Likes.findOne({ + const Duet4 = await Duets.findOne({ order: [['id', 'ASC']], - offset: 1, + offset: 4, }); - if (Like1?.setUser) { - await Like1.setUser(relatedUser1); - } - - const relatedUser2 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), - }); - const Like2 = await Likes.findOne({ - order: [['id', 'ASC']], - offset: 2, - }); - if (Like2?.setUser) { - await Like2.setUser(relatedUser2); - } -} - -async function associateNotificationWithUser() { - const relatedUser0 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), - }); - const Notification0 = await Notifications.findOne({ - order: [['id', 'ASC']], - offset: 0, - }); - if (Notification0?.setUser) { - await Notification0.setUser(relatedUser0); - } - - const relatedUser1 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), - }); - const Notification1 = await Notifications.findOne({ - order: [['id', 'ASC']], - offset: 1, - }); - if (Notification1?.setUser) { - await Notification1.setUser(relatedUser1); - } - - const relatedUser2 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), - }); - const Notification2 = await Notifications.findOne({ - order: [['id', 'ASC']], - offset: 2, - }); - if (Notification2?.setUser) { - await Notification2.setUser(relatedUser2); + if (Duet4?.setCollaborator) { + await Duet4.setCollaborator(relatedCollaborator4); } } @@ -559,116 +651,316 @@ async function associatePlaylistWithCreator() { if (Playlist2?.setCreator) { await Playlist2.setCreator(relatedCreator2); } + + const relatedCreator3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Playlist3 = await Playlists.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Playlist3?.setCreator) { + await Playlist3.setCreator(relatedCreator3); + } + + const relatedCreator4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Playlist4 = await Playlists.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Playlist4?.setCreator) { + await Playlist4.setCreator(relatedCreator4); + } } // Similar logic for "relation_many" -async function associateReportWithReported_content() { - const relatedReported_content0 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), +async function associateNotificationWithUser() { + const relatedUser0 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), }); - const Report0 = await Reports.findOne({ + const Notification0 = await Notifications.findOne({ order: [['id', 'ASC']], offset: 0, }); - if (Report0?.setReported_content) { - await Report0.setReported_content(relatedReported_content0); + if (Notification0?.setUser) { + await Notification0.setUser(relatedUser0); } - const relatedReported_content1 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), + const relatedUser1 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), }); - const Report1 = await Reports.findOne({ + const Notification1 = await Notifications.findOne({ order: [['id', 'ASC']], offset: 1, }); - if (Report1?.setReported_content) { - await Report1.setReported_content(relatedReported_content1); + if (Notification1?.setUser) { + await Notification1.setUser(relatedUser1); } - const relatedReported_content2 = await Songs.findOne({ - offset: Math.floor(Math.random() * (await Songs.count())), + const relatedUser2 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), }); - const Report2 = await Reports.findOne({ + const Notification2 = await Notifications.findOne({ order: [['id', 'ASC']], offset: 2, }); - if (Report2?.setReported_content) { - await Report2.setReported_content(relatedReported_content2); + if (Notification2?.setUser) { + await Notification2.setUser(relatedUser2); + } + + const relatedUser3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Notification3 = await Notifications.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Notification3?.setUser) { + await Notification3.setUser(relatedUser3); + } + + const relatedUser4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Notification4 = await Notifications.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Notification4?.setUser) { + await Notification4.setUser(relatedUser4); } } -async function associateReportWithReporter() { - const relatedReporter0 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), +async function associateLikeWithSong() { + const relatedSong0 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), }); - const Report0 = await Reports.findOne({ + const Like0 = await Likes.findOne({ order: [['id', 'ASC']], offset: 0, }); - if (Report0?.setReporter) { - await Report0.setReporter(relatedReporter0); + if (Like0?.setSong) { + await Like0.setSong(relatedSong0); } - const relatedReporter1 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), + const relatedSong1 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), }); - const Report1 = await Reports.findOne({ + const Like1 = await Likes.findOne({ order: [['id', 'ASC']], offset: 1, }); - if (Report1?.setReporter) { - await Report1.setReporter(relatedReporter1); + if (Like1?.setSong) { + await Like1.setSong(relatedSong1); } - const relatedReporter2 = await Users.findOne({ - offset: Math.floor(Math.random() * (await Users.count())), + const relatedSong2 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), }); - const Report2 = await Reports.findOne({ + const Like2 = await Likes.findOne({ order: [['id', 'ASC']], offset: 2, }); - if (Report2?.setReporter) { - await Report2.setReporter(relatedReporter2); + if (Like2?.setSong) { + await Like2.setSong(relatedSong2); + } + + const relatedSong3 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Like3 = await Likes.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Like3?.setSong) { + await Like3.setSong(relatedSong3); + } + + const relatedSong4 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Like4 = await Likes.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Like4?.setSong) { + await Like4.setSong(relatedSong4); } } -async function associateSongWithArtist() { - const relatedArtist0 = await Users.findOne({ +async function associateLikeWithUser() { + const relatedUser0 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); - const Song0 = await Songs.findOne({ + const Like0 = await Likes.findOne({ order: [['id', 'ASC']], offset: 0, }); - if (Song0?.setArtist) { - await Song0.setArtist(relatedArtist0); + if (Like0?.setUser) { + await Like0.setUser(relatedUser0); } - const relatedArtist1 = await Users.findOne({ + const relatedUser1 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); - const Song1 = await Songs.findOne({ + const Like1 = await Likes.findOne({ order: [['id', 'ASC']], offset: 1, }); - if (Song1?.setArtist) { - await Song1.setArtist(relatedArtist1); + if (Like1?.setUser) { + await Like1.setUser(relatedUser1); } - const relatedArtist2 = await Users.findOne({ + const relatedUser2 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); - const Song2 = await Songs.findOne({ + const Like2 = await Likes.findOne({ order: [['id', 'ASC']], offset: 2, }); - if (Song2?.setArtist) { - await Song2.setArtist(relatedArtist2); + if (Like2?.setUser) { + await Like2.setUser(relatedUser2); + } + + const relatedUser3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Like3 = await Likes.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Like3?.setUser) { + await Like3.setUser(relatedUser3); + } + + const relatedUser4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Like4 = await Likes.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Like4?.setUser) { + await Like4.setUser(relatedUser4); } } -// Similar logic for "relation_many" +async function associateCommentWithSong() { + const relatedSong0 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Comment0 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 0, + }); + if (Comment0?.setSong) { + await Comment0.setSong(relatedSong0); + } + + const relatedSong1 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Comment1 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 1, + }); + if (Comment1?.setSong) { + await Comment1.setSong(relatedSong1); + } + + const relatedSong2 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Comment2 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 2, + }); + if (Comment2?.setSong) { + await Comment2.setSong(relatedSong2); + } + + const relatedSong3 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Comment3 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Comment3?.setSong) { + await Comment3.setSong(relatedSong3); + } + + const relatedSong4 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Comment4 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Comment4?.setSong) { + await Comment4.setSong(relatedSong4); + } +} + +async function associateCommentWithUser() { + const relatedUser0 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Comment0 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 0, + }); + if (Comment0?.setUser) { + await Comment0.setUser(relatedUser0); + } + + const relatedUser1 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Comment1 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 1, + }); + if (Comment1?.setUser) { + await Comment1.setUser(relatedUser1); + } + + const relatedUser2 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Comment2 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 2, + }); + if (Comment2?.setUser) { + await Comment2.setUser(relatedUser2); + } + + const relatedUser3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Comment3 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Comment3?.setUser) { + await Comment3.setUser(relatedUser3); + } + + const relatedUser4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Comment4 = await Comments.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Comment4?.setUser) { + await Comment4.setUser(relatedUser4); + } +} async function associateTipWithArtist() { const relatedArtist0 = await Users.findOne({ @@ -703,6 +995,28 @@ async function associateTipWithArtist() { if (Tip2?.setArtist) { await Tip2.setArtist(relatedArtist2); } + + const relatedArtist3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Tip3 = await Tips.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Tip3?.setArtist) { + await Tip3.setArtist(relatedArtist3); + } + + const relatedArtist4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Tip4 = await Tips.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Tip4?.setArtist) { + await Tip4.setArtist(relatedArtist4); + } } async function associateTipWithSupporter() { @@ -738,76 +1052,212 @@ async function associateTipWithSupporter() { if (Tip2?.setSupporter) { await Tip2.setSupporter(relatedSupporter2); } + + const relatedSupporter3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Tip3 = await Tips.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Tip3?.setSupporter) { + await Tip3.setSupporter(relatedSupporter3); + } + + const relatedSupporter4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Tip4 = await Tips.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Tip4?.setSupporter) { + await Tip4.setSupporter(relatedSupporter4); + } +} + +async function associateReportWithReported_content() { + const relatedReported_content0 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Report0 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 0, + }); + if (Report0?.setReported_content) { + await Report0.setReported_content(relatedReported_content0); + } + + const relatedReported_content1 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Report1 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 1, + }); + if (Report1?.setReported_content) { + await Report1.setReported_content(relatedReported_content1); + } + + const relatedReported_content2 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Report2 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 2, + }); + if (Report2?.setReported_content) { + await Report2.setReported_content(relatedReported_content2); + } + + const relatedReported_content3 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Report3 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Report3?.setReported_content) { + await Report3.setReported_content(relatedReported_content3); + } + + const relatedReported_content4 = await Songs.findOne({ + offset: Math.floor(Math.random() * (await Songs.count())), + }); + const Report4 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Report4?.setReported_content) { + await Report4.setReported_content(relatedReported_content4); + } +} + +async function associateReportWithReporter() { + const relatedReporter0 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Report0 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 0, + }); + if (Report0?.setReporter) { + await Report0.setReporter(relatedReporter0); + } + + const relatedReporter1 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Report1 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 1, + }); + if (Report1?.setReporter) { + await Report1.setReporter(relatedReporter1); + } + + const relatedReporter2 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Report2 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 2, + }); + if (Report2?.setReporter) { + await Report2.setReporter(relatedReporter2); + } + + const relatedReporter3 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Report3 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 3, + }); + if (Report3?.setReporter) { + await Report3.setReporter(relatedReporter3); + } + + const relatedReporter4 = await Users.findOne({ + offset: Math.floor(Math.random() * (await Users.count())), + }); + const Report4 = await Reports.findOne({ + order: [['id', 'ASC']], + offset: 4, + }); + if (Report4?.setReporter) { + await Report4.setReporter(relatedReporter4); + } } module.exports = { up: async (queryInterface, Sequelize) => { - await Comments.bulkCreate(CommentsData); + await Songs.bulkCreate(SongsData); await Duets.bulkCreate(DuetsData); - await Likes.bulkCreate(LikesData); + await Playlists.bulkCreate(PlaylistsData); await Notifications.bulkCreate(NotificationsData); - await Playlists.bulkCreate(PlaylistsData); + await Likes.bulkCreate(LikesData); - await Reports.bulkCreate(ReportsData); - - await Songs.bulkCreate(SongsData); + await Comments.bulkCreate(CommentsData); await Tips.bulkCreate(TipsData); + await Reports.bulkCreate(ReportsData); + await Promise.all([ // Similar logic for "relation_many" - await associateCommentWithSong(), - - await associateCommentWithUser(), - - await associateDuetWithOriginal_song(), - - await associateDuetWithCollaborator(), - - await associateLikeWithSong(), - - await associateLikeWithUser(), - - await associateNotificationWithUser(), - - await associatePlaylistWithCreator(), - - // Similar logic for "relation_many" - - await associateReportWithReported_content(), - - await associateReportWithReporter(), - await associateSongWithArtist(), // Similar logic for "relation_many" + await associateDuetWithOriginal_song(), + + await associateDuetWithCollaborator(), + + await associatePlaylistWithCreator(), + + // Similar logic for "relation_many" + + await associateNotificationWithUser(), + + await associateLikeWithSong(), + + await associateLikeWithUser(), + + await associateCommentWithSong(), + + await associateCommentWithUser(), + await associateTipWithArtist(), await associateTipWithSupporter(), + + await associateReportWithReported_content(), + + await associateReportWithReporter(), ]); }, down: async (queryInterface, Sequelize) => { - await queryInterface.bulkDelete('comments', null, {}); + await queryInterface.bulkDelete('songs', null, {}); await queryInterface.bulkDelete('duets', null, {}); - await queryInterface.bulkDelete('likes', null, {}); + await queryInterface.bulkDelete('playlists', null, {}); await queryInterface.bulkDelete('notifications', null, {}); - await queryInterface.bulkDelete('playlists', null, {}); + await queryInterface.bulkDelete('likes', null, {}); - await queryInterface.bulkDelete('reports', null, {}); - - await queryInterface.bulkDelete('songs', null, {}); + await queryInterface.bulkDelete('comments', null, {}); await queryInterface.bulkDelete('tips', null, {}); + + await queryInterface.bulkDelete('reports', null, {}); }, }; diff --git a/backend/src/index.js b/backend/src/index.js index ebd4bcf..b43e0f3 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -21,24 +21,24 @@ const contactFormRoutes = require('./routes/contactForm'); const usersRoutes = require('./routes/users'); -const commentsRoutes = require('./routes/comments'); +const songsRoutes = require('./routes/songs'); const duetsRoutes = require('./routes/duets'); -const likesRoutes = require('./routes/likes'); +const playlistsRoutes = require('./routes/playlists'); const notificationsRoutes = require('./routes/notifications'); -const playlistsRoutes = require('./routes/playlists'); +const likesRoutes = require('./routes/likes'); -const reportsRoutes = require('./routes/reports'); - -const songsRoutes = require('./routes/songs'); +const commentsRoutes = require('./routes/comments'); const tipsRoutes = require('./routes/tips'); const rolesRoutes = require('./routes/roles'); +const reportsRoutes = require('./routes/reports'); + const permissionsRoutes = require('./routes/permissions'); const getBaseUrl = (url) => { @@ -113,9 +113,9 @@ app.use( ); app.use( - '/api/comments', + '/api/songs', passport.authenticate('jwt', { session: false }), - commentsRoutes, + songsRoutes, ); app.use( @@ -125,9 +125,9 @@ app.use( ); app.use( - '/api/likes', + '/api/playlists', passport.authenticate('jwt', { session: false }), - likesRoutes, + playlistsRoutes, ); app.use( @@ -137,21 +137,15 @@ app.use( ); app.use( - '/api/playlists', + '/api/likes', passport.authenticate('jwt', { session: false }), - playlistsRoutes, + likesRoutes, ); app.use( - '/api/reports', + '/api/comments', passport.authenticate('jwt', { session: false }), - reportsRoutes, -); - -app.use( - '/api/songs', - passport.authenticate('jwt', { session: false }), - songsRoutes, + commentsRoutes, ); app.use( @@ -166,6 +160,12 @@ app.use( rolesRoutes, ); +app.use( + '/api/reports', + passport.authenticate('jwt', { session: false }), + reportsRoutes, +); + app.use( '/api/permissions', passport.authenticate('jwt', { session: false }), diff --git a/backend/src/services/search.js b/backend/src/services/search.js index af8e537..5c7b59a 100644 --- a/backend/src/services/search.js +++ b/backend/src/services/search.js @@ -43,15 +43,15 @@ module.exports = class SearchService { const tableColumns = { users: ['firstName', 'lastName', 'phoneNumber', 'email'], - comments: ['content'], - - notifications: ['message'], + songs: ['title', 'description'], playlists: ['name'], - reports: ['reason'], + notifications: ['message'], - songs: ['title', 'description'], + comments: ['content'], + + reports: ['reason'], }; const columnsInt = { tips: ['amount'], diff --git a/frontend/src/components/WebPageComponents/Header.tsx b/frontend/src/components/WebPageComponents/Header.tsx index f9f339c..ebfb323 100644 --- a/frontend/src/components/WebPageComponents/Header.tsx +++ b/frontend/src/components/WebPageComponents/Header.tsx @@ -17,9 +17,9 @@ export default function WebSiteHeader({ projectName }: WebSiteHeaderProps) { const websiteHeder = useAppSelector((state) => state.style.websiteHeder); const borders = useAppSelector((state) => state.style.borders); - const style = HeaderStyle.PAGES_RIGHT; + const style = HeaderStyle.PAGES_LEFT; - const design = HeaderDesigns.DEFAULT_DESIGN; + const design = HeaderDesigns.DESIGN_DIVERSITY; return (
{ }); const [users, setUsers] = React.useState(loadingMessage); - const [comments, setComments] = React.useState(loadingMessage); - const [duets, setDuets] = React.useState(loadingMessage); - const [likes, setLikes] = React.useState(loadingMessage); - const [notifications, setNotifications] = React.useState(loadingMessage); - const [playlists, setPlaylists] = React.useState(loadingMessage); - const [reports, setReports] = React.useState(loadingMessage); const [songs, setSongs] = React.useState(loadingMessage); + const [duets, setDuets] = React.useState(loadingMessage); + const [playlists, setPlaylists] = React.useState(loadingMessage); + const [notifications, setNotifications] = React.useState(loadingMessage); + const [likes, setLikes] = React.useState(loadingMessage); + const [comments, setComments] = React.useState(loadingMessage); const [tips, setTips] = React.useState(loadingMessage); const [roles, setRoles] = React.useState(loadingMessage); + const [reports, setReports] = React.useState(loadingMessage); const [permissions, setPermissions] = React.useState(loadingMessage); const [widgetsRole, setWidgetsRole] = React.useState({ @@ -51,28 +51,28 @@ const Dashboard = () => { async function loadData() { const entities = [ 'users', - 'comments', - 'duets', - 'likes', - 'notifications', - 'playlists', - 'reports', 'songs', + 'duets', + 'playlists', + 'notifications', + 'likes', + 'comments', 'tips', 'roles', + 'reports', 'permissions', ]; const fns = [ setUsers, - setComments, - setDuets, - setLikes, - setNotifications, - setPlaylists, - setReports, setSongs, + setDuets, + setPlaylists, + setNotifications, + setLikes, + setComments, setTips, setRoles, + setReports, setPermissions, ]; @@ -220,8 +220,8 @@ const Dashboard = () => { )} - {hasPermission(currentUser, 'READ_COMMENTS') && ( - + {hasPermission(currentUser, 'READ_SONGS') && ( +
{
- Comments + Songs
- {comments} + {songs}
@@ -245,8 +245,8 @@ const Dashboard = () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore path={ - 'mdiCommentText' in icon - ? icon['mdiCommentText' as keyof typeof icon] + 'mdiMusicNote' in icon + ? icon['mdiMusicNote' as keyof typeof icon] : icon.mdiTable || icon.mdiTable } /> @@ -292,8 +292,8 @@ const Dashboard = () => { )} - {hasPermission(currentUser, 'READ_LIKES') && ( - + {hasPermission(currentUser, 'READ_PLAYLISTS') && ( +
{
- Likes + Playlists
- {likes} + {playlists}
@@ -317,8 +317,8 @@ const Dashboard = () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore path={ - 'mdiThumbUp' in icon - ? icon['mdiThumbUp' as keyof typeof icon] + 'mdiPlaylistMusic' in icon + ? icon['mdiPlaylistMusic' as keyof typeof icon] : icon.mdiTable || icon.mdiTable } /> @@ -364,8 +364,8 @@ const Dashboard = () => { )} - {hasPermission(currentUser, 'READ_PLAYLISTS') && ( - + {hasPermission(currentUser, 'READ_LIKES') && ( +
{
- Playlists + Likes
- {playlists} + {likes}
@@ -389,8 +389,8 @@ const Dashboard = () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore path={ - 'mdiPlaylistMusic' in icon - ? icon['mdiPlaylistMusic' as keyof typeof icon] + 'mdiThumbUp' in icon + ? icon['mdiThumbUp' as keyof typeof icon] : icon.mdiTable || icon.mdiTable } /> @@ -400,8 +400,8 @@ const Dashboard = () => { )} - {hasPermission(currentUser, 'READ_REPORTS') && ( - + {hasPermission(currentUser, 'READ_COMMENTS') && ( +
{
- Reports + Comments
- {reports} + {comments}
@@ -425,44 +425,8 @@ const Dashboard = () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore path={ - 'mdiAlertCircle' in icon - ? icon['mdiAlertCircle' as keyof typeof icon] - : icon.mdiTable || icon.mdiTable - } - /> -
-
-
- - )} - - {hasPermission(currentUser, 'READ_SONGS') && ( - -
-
-
-
- Songs -
-
- {songs} -
-
-
- @@ -542,6 +506,42 @@ const Dashboard = () => { )} + {hasPermission(currentUser, 'READ_REPORTS') && ( + +
+
+
+
+ Reports +
+
+ {reports} +
+
+
+ +
+
+
+ + )} + {hasPermission(currentUser, 'READ_PERMISSIONS') && (
{ - <> -

Comments Song

- -
- - - - - - - - - - {songs.comments_song && - Array.isArray(songs.comments_song) && - songs.comments_song.map((item: any) => ( - - router.push( - `/comments/comments-view/?id=${item.id}`, - ) - } - > - - - - - ))} - -
ContentCommentDate
{item.content} - {dataFormatter.dateTimeFormatter(item.comment_date)} -
-
- {!songs?.comments_song?.length && ( -
No data
- )} -
- - <>

Duets OriginalSong

{ + <> +

Comments Song

+ +
+ + + + + + + + + + {songs.comments_song && + Array.isArray(songs.comments_song) && + songs.comments_song.map((item: any) => ( + + router.push( + `/comments/comments-view/?id=${item.id}`, + ) + } + > + + + + + ))} + +
ContentCommentDate
{item.content} + {dataFormatter.dateTimeFormatter(item.comment_date)} +
+
+ {!songs?.comments_song?.length && ( +
No data
+ )} +
+ + <>

Reports ReportedContent

{ <> -

Comments User

+

Songs Artist

{ - + - + + + + + - {users.comments_user && - Array.isArray(users.comments_user) && - users.comments_user.map((item: any) => ( + {users.songs_artist && + Array.isArray(users.songs_artist) && + users.songs_artist.map((item: any) => ( - router.push( - `/comments/comments-view/?id=${item.id}`, - ) + router.push(`/songs/songs-view/?id=${item.id}`) } > - + - + + + + ))}
ContentTitleCommentDateDescriptionGenreReleaseDate
{item.content}{item.title} - {dataFormatter.dateTimeFormatter(item.comment_date)} + {item.description}{item.genre} + {dataFormatter.dateTimeFormatter(item.release_date)}
- {!users?.comments_user?.length && ( + {!users?.songs_artist?.length && (
No data
)} @@ -219,7 +225,7 @@ const UsersView = () => { <> -

Likes User

+

Playlists Creator

{ - + - {users.likes_user && - Array.isArray(users.likes_user) && - users.likes_user.map((item: any) => ( + {users.playlists_creator && + Array.isArray(users.playlists_creator) && + users.playlists_creator.map((item: any) => ( - router.push(`/likes/likes-view/?id=${item.id}`) + router.push( + `/playlists/playlists-view/?id=${item.id}`, + ) } > - + ))}
LikeDateName
- {dataFormatter.dateTimeFormatter(item.like_date)} - {item.name}
- {!users?.likes_user?.length && ( + {!users?.playlists_creator?.length && (
No data
)} @@ -307,7 +313,7 @@ const UsersView = () => { <> -

Playlists Creator

+

Likes User

{ - + - {users.playlists_creator && - Array.isArray(users.playlists_creator) && - users.playlists_creator.map((item: any) => ( + {users.likes_user && + Array.isArray(users.likes_user) && + users.likes_user.map((item: any) => ( + + router.push(`/likes/likes-view/?id=${item.id}`) + } + > + + + ))} + +
NameLikeDate
+ {dataFormatter.dateTimeFormatter(item.like_date)} +
+
+ {!users?.likes_user?.length && ( +
No data
+ )} + + + + <> +

Comments User

+ +
+ + + + + + + + + + {users.comments_user && + Array.isArray(users.comments_user) && + users.comments_user.map((item: any) => ( router.push( - `/playlists/playlists-view/?id=${item.id}`, + `/comments/comments-view/?id=${item.id}`, ) } > - - - ))} - -
ContentCommentDate
{item.name}
-
- {!users?.playlists_creator?.length && ( -
No data
- )} -
- + {item.content} - <> -

Reports Reporter

- -
- - - - - - - - - - {users.reports_reporter && - Array.isArray(users.reports_reporter) && - users.reports_reporter.map((item: any) => ( - - router.push(`/reports/reports-view/?id=${item.id}`) - } - > - - - ))}
ReasonReportDate
{item.reason} - {dataFormatter.dateTimeFormatter(item.report_date)} + + {dataFormatter.dateTimeFormatter(item.comment_date)}
- {!users?.reports_reporter?.length && ( -
No data
- )} -
- - - <> -

Songs Artist

- -
- - - - - - - - - - - - - - {users.songs_artist && - Array.isArray(users.songs_artist) && - users.songs_artist.map((item: any) => ( - - router.push(`/songs/songs-view/?id=${item.id}`) - } - > - - - - - - - - - ))} - -
TitleDescriptionGenreReleaseDate
{item.title}{item.description}{item.genre} - {dataFormatter.dateTimeFormatter(item.release_date)} -
-
- {!users?.songs_artist?.length && ( + {!users?.comments_user?.length && (
No data
)}
@@ -515,6 +474,47 @@ const UsersView = () => { + <> +

Reports Reporter

+ +
+ + + + + + + + + + {users.reports_reporter && + Array.isArray(users.reports_reporter) && + users.reports_reporter.map((item: any) => ( + + router.push(`/reports/reports-view/?id=${item.id}`) + } + > + + + + + ))} + +
ReasonReportDate
{item.reason} + {dataFormatter.dateTimeFormatter(item.report_date)} +
+
+ {!users?.reports_reporter?.length && ( +
No data
+ )} +
+ +