aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Data/DevHive.Data.Models/Friendship.cs17
-rw-r--r--src/Data/DevHive.Data/ConnectionString.json6
-rw-r--r--src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.Designer.cs600
-rw-r--r--src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.cs85
-rw-r--r--src/Data/DevHive.Data/Migrations/20210407161947_Initial_migration.Designer.cs (renamed from src/Data/DevHive.Data/Migrations/20210328161726_Profile_Pic_Property_Alter.Designer.cs)6
-rw-r--r--src/Data/DevHive.Data/Migrations/20210407161947_Initial_migration.cs (renamed from src/Data/DevHive.Data/Migrations/20210328161726_Profile_Pic_Property_Alter.cs)2
-rw-r--r--src/Data/DevHive.Data/Migrations/DevHiveContextModelSnapshot.cs2
-rw-r--r--src/Data/DevHive.Data/Repositories/FriendshipRepository.cs20
-rw-r--r--src/Services/DevHive.Services.Models/User/FriendshipServiceModel.cs11
-rw-r--r--src/Services/DevHive.Services/Configurations/Mapping/UserMappings.cs3
-rw-r--r--src/Services/DevHive.Services/Interfaces/IFriendsService.cs4
-rw-r--r--src/Services/DevHive.Services/Services/FriendsService.cs33
-rw-r--r--src/Web/DevHive.Web/Controllers/FriendsController.cs8
13 files changed, 92 insertions, 705 deletions
diff --git a/src/Data/DevHive.Data.Models/Friendship.cs b/src/Data/DevHive.Data.Models/Friendship.cs
new file mode 100644
index 0000000..91ac9c7
--- /dev/null
+++ b/src/Data/DevHive.Data.Models/Friendship.cs
@@ -0,0 +1,17 @@
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace DevHive.Data.Models
+{
+ //class for handling the many to many relationship betwen users and users for friends
+ public class Friendship
+ {
+ [NotMapped]
+ public Guid BaseUserId { get; set; }
+ [NotMapped]
+ public Guid FriendUserId { get; set; }
+
+ public User BaseUser { get; set; }
+ public User FriendUser { get; set; }
+ }
+}
diff --git a/src/Data/DevHive.Data/ConnectionString.json b/src/Data/DevHive.Data/ConnectionString.json
index 1281a1c..c48d214 100644
--- a/src/Data/DevHive.Data/ConnectionString.json
+++ b/src/Data/DevHive.Data/ConnectionString.json
@@ -1,5 +1,5 @@
{
- "ConnectionStrings": {
- "DEV": "Server=localhost;Port=5432;Database=DevHive_API;User Id=postgres;Password=password;"
- }
+ "ConnectionStrings": {
+ "DEV": "Server=localhost;Port=5432;Database=DevHive_API;User Id=postgres;Password=password;"
+ }
}
diff --git a/src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.Designer.cs b/src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.Designer.cs
deleted file mode 100644
index 0aefeb1..0000000
--- a/src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.Designer.cs
+++ /dev/null
@@ -1,600 +0,0 @@
-// <auto-generated />
-using System;
-using DevHive.Data;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-namespace DevHive.Data.Migrations
-{
- [DbContext(typeof(DevHiveContext))]
- [Migration("20210322171857_Remove_old_rating_system")]
- partial class Remove_old_rating_system
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("Relational:MaxIdentifierLength", 63)
- .HasAnnotation("ProductVersion", "5.0.3")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
- modelBuilder.Entity("DevHive.Data.Models.Comment", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<Guid?>("CreatorId")
- .HasColumnType("uuid");
-
- b.Property<string>("Message")
- .HasColumnType("text");
-
- b.Property<Guid?>("PostId")
- .HasColumnType("uuid");
-
- b.Property<DateTime>("TimeCreated")
- .HasColumnType("timestamp without time zone");
-
- b.HasKey("Id");
-
- b.HasIndex("CreatorId");
-
- b.HasIndex("PostId");
-
- b.ToTable("Comments");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Language", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<string>("Name")
- .HasColumnType("text");
-
- b.HasKey("Id");
-
- b.ToTable("Languages");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Post", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<Guid?>("CreatorId")
- .HasColumnType("uuid");
-
- b.Property<string>("Message")
- .HasColumnType("text");
-
- b.Property<DateTime>("TimeCreated")
- .HasColumnType("timestamp without time zone");
-
- b.HasKey("Id");
-
- b.HasIndex("CreatorId");
-
- b.ToTable("Posts");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.ProfilePicture", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<string>("PictureURL")
- .HasColumnType("text");
-
- b.Property<Guid>("UserId")
- .HasColumnType("uuid");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId")
- .IsUnique();
-
- b.ToTable("ProfilePicture");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Rating", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<bool>("IsLike")
- .HasColumnType("boolean");
-
- b.Property<Guid?>("PostId")
- .HasColumnType("uuid");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("uuid");
-
- b.HasKey("Id");
-
- b.HasIndex("PostId");
-
- b.HasIndex("UserId");
-
- b.ToTable("Rating");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Relational.PostAttachments", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<string>("FileUrl")
- .HasColumnType("text");
-
- b.Property<Guid?>("PostId")
- .HasColumnType("uuid");
-
- b.HasKey("Id");
-
- b.HasIndex("PostId");
-
- b.ToTable("PostAttachments");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Role", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<string>("ConcurrencyStamp")
- .IsConcurrencyToken()
- .HasColumnType("text");
-
- b.Property<string>("Name")
- .HasMaxLength(256)
- .HasColumnType("character varying(256)");
-
- b.Property<string>("NormalizedName")
- .HasMaxLength(256)
- .HasColumnType("character varying(256)");
-
- b.HasKey("Id");
-
- b.HasIndex("NormalizedName")
- .IsUnique()
- .HasDatabaseName("RoleNameIndex");
-
- b.ToTable("AspNetRoles");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Technology", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<string>("Name")
- .HasColumnType("text");
-
- b.HasKey("Id");
-
- b.ToTable("Technologies");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.User", b =>
- {
- b.Property<Guid>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uuid");
-
- b.Property<int>("AccessFailedCount")
- .HasColumnType("integer");
-
- b.Property<string>("ConcurrencyStamp")
- .IsConcurrencyToken()
- .HasColumnType("text");
-
- b.Property<string>("Email")
- .HasMaxLength(256)
- .HasColumnType("character varying(256)");
-
- b.Property<bool>("EmailConfirmed")
- .HasColumnType("boolean");
-
- b.Property<string>("FirstName")
- .HasColumnType("text");
-
- b.Property<string>("LastName")
- .HasColumnType("text");
-
- b.Property<bool>("LockoutEnabled")
- .HasColumnType("boolean");
-
- b.Property<DateTimeOffset?>("LockoutEnd")
- .HasColumnType("timestamp with time zone");
-
- b.Property<string>("NormalizedEmail")
- .HasMaxLength(256)
- .HasColumnType("character varying(256)");
-
- b.Property<string>("NormalizedUserName")
- .HasMaxLength(256)
- .HasColumnType("character varying(256)");
-
- b.Property<string>("PasswordHash")
- .HasColumnType("text");
-
- b.Property<string>("PhoneNumber")
- .HasColumnType("text");
-
- b.Property<bool>("PhoneNumberConfirmed")
- .HasColumnType("boolean");
-
- b.Property<string>("SecurityStamp")
- .HasColumnType("text");
-
- b.Property<bool>("TwoFactorEnabled")
- .HasColumnType("boolean");
-
- b.Property<Guid?>("UserId")
- .HasColumnType("uuid");
-
- b.Property<string>("UserName")
- .HasMaxLength(256)
- .HasColumnType("character varying(256)");
-
- b.HasKey("Id");
-
- b.HasIndex("NormalizedEmail")
- .HasDatabaseName("EmailIndex");
-
- b.HasIndex("NormalizedUserName")
- .IsUnique()
- .HasDatabaseName("UserNameIndex");
-
- b.HasIndex("UserId");
-
- b.HasIndex("UserName")
- .IsUnique();
-
- b.ToTable("AspNetUsers");
- });
-
- modelBuilder.Entity("LanguageUser", b =>
- {
- b.Property<Guid>("LanguagesId")
- .HasColumnType("uuid");
-
- b.Property<Guid>("UsersId")
- .HasColumnType("uuid");
-
- b.HasKey("LanguagesId", "UsersId");
-
- b.HasIndex("UsersId");
-
- b.ToTable("LanguageUser");
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
- b.Property<string>("ClaimType")
- .HasColumnType("text");
-
- b.Property<string>("ClaimValue")
- .HasColumnType("text");
-
- b.Property<Guid>("RoleId")
- .HasColumnType("uuid");
-
- b.HasKey("Id");
-
- b.HasIndex("RoleId");
-
- b.ToTable("AspNetRoleClaims");
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
- {
- b.Property<int>("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
- b.Property<string>("ClaimType")
- .HasColumnType("text");
-
- b.Property<string>("ClaimValue")
- .HasColumnType("text");
-
- b.Property<Guid>("UserId")
- .HasColumnType("uuid");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AspNetUserClaims");
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
- {
- b.Property<string>("LoginProvider")
- .HasColumnType("text");
-
- b.Property<string>("ProviderKey")
- .HasColumnType("text");
-
- b.Property<string>("ProviderDisplayName")
- .HasColumnType("text");
-
- b.Property<Guid>("UserId")
- .HasColumnType("uuid");
-
- b.HasKey("LoginProvider", "ProviderKey");
-
- b.HasIndex("UserId");
-
- b.ToTable("AspNetUserLogins");
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b =>
- {
- b.Property<Guid>("UserId")
- .HasColumnType("uuid");
-
- b.Property<Guid>("RoleId")
- .HasColumnType("uuid");
-
- b.HasKey("UserId", "RoleId");
-
- b.HasIndex("RoleId");
-
- b.ToTable("AspNetUserRoles");
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
- {
- b.Property<Guid>("UserId")
- .HasColumnType("uuid");
-
- b.Property<string>("LoginProvider")
- .HasColumnType("text");
-
- b.Property<string>("Name")
- .HasColumnType("text");
-
- b.Property<string>("Value")
- .HasColumnType("text");
-
- b.HasKey("UserId", "LoginProvider", "Name");
-
- b.ToTable("AspNetUserTokens");
- });
-
- modelBuilder.Entity("RoleUser", b =>
- {
- b.Property<Guid>("RolesId")
- .HasColumnType("uuid");
-
- b.Property<Guid>("UsersId")
- .HasColumnType("uuid");
-
- b.HasKey("RolesId", "UsersId");
-
- b.HasIndex("UsersId");
-
- b.ToTable("RoleUser");
- });
-
- modelBuilder.Entity("TechnologyUser", b =>
- {
- b.Property<Guid>("TechnologiesId")
- .HasColumnType("uuid");
-
- b.Property<Guid>("UsersId")
- .HasColumnType("uuid");
-
- b.HasKey("TechnologiesId", "UsersId");
-
- b.HasIndex("UsersId");
-
- b.ToTable("TechnologyUser");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Comment", b =>
- {
- b.HasOne("DevHive.Data.Models.User", "Creator")
- .WithMany("Comments")
- .HasForeignKey("CreatorId");
-
- b.HasOne("DevHive.Data.Models.Post", "Post")
- .WithMany("Comments")
- .HasForeignKey("PostId");
-
- b.Navigation("Creator");
-
- b.Navigation("Post");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Post", b =>
- {
- b.HasOne("DevHive.Data.Models.User", "Creator")
- .WithMany("Posts")
- .HasForeignKey("CreatorId");
-
- b.Navigation("Creator");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.ProfilePicture", b =>
- {
- b.HasOne("DevHive.Data.Models.User", "User")
- .WithOne("ProfilePicture")
- .HasForeignKey("DevHive.Data.Models.ProfilePicture", "UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Rating", b =>
- {
- b.HasOne("DevHive.Data.Models.Post", "Post")
- .WithMany("Ratings")
- .HasForeignKey("PostId");
-
- b.HasOne("DevHive.Data.Models.User", "User")
- .WithMany()
- .HasForeignKey("UserId");
-
- b.Navigation("Post");
-
- b.Navigation("User");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Relational.PostAttachments", b =>
- {
- b.HasOne("DevHive.Data.Models.Post", "Post")
- .WithMany("Attachments")
- .HasForeignKey("PostId");
-
- b.Navigation("Post");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.User", b =>
- {
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany("Friends")
- .HasForeignKey("UserId");
- });
-
- modelBuilder.Entity("LanguageUser", b =>
- {
- b.HasOne("DevHive.Data.Models.Language", null)
- .WithMany()
- .HasForeignKey("LanguagesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany()
- .HasForeignKey("UsersId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b =>
- {
- b.HasOne("DevHive.Data.Models.Role", null)
- .WithMany()
- .HasForeignKey("RoleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
- {
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
- {
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b =>
- {
- b.HasOne("DevHive.Data.Models.Role", null)
- .WithMany()
- .HasForeignKey("RoleId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
- {
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany()
- .HasForeignKey("UserId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("RoleUser", b =>
- {
- b.HasOne("DevHive.Data.Models.Role", null)
- .WithMany()
- .HasForeignKey("RolesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany()
- .HasForeignKey("UsersId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("TechnologyUser", b =>
- {
- b.HasOne("DevHive.Data.Models.Technology", null)
- .WithMany()
- .HasForeignKey("TechnologiesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("DevHive.Data.Models.User", null)
- .WithMany()
- .HasForeignKey("UsersId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
- });
-
- modelBuilder.Entity("DevHive.Data.Models.Post", b =>
- {
- b.Navigation("Attachments");
-
- b.Navigation("Comments");
-
- b.Navigation("Ratings");
- });
-
- modelBuilder.Entity("DevHive.Data.Models.User", b =>
- {
- b.Navigation("Comments");
-
- b.Navigation("Friends");
-
- b.Navigation("Posts");
-
- b.Navigation("ProfilePicture");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.cs b/src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.cs
deleted file mode 100644
index 3d5690e..0000000
--- a/src/Data/DevHive.Data/Migrations/20210322171857_Remove_old_rating_system.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-namespace DevHive.Data.Migrations
-{
- public partial class Remove_old_rating_system : Migration
- {
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "RatedPosts");
-
- migrationBuilder.DropTable(
- name: "UserRates");
- }
-
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "RatedPosts",
- columns: table => new
- {
- UserId = table.Column<Guid>(type: "uuid", nullable: false),
- PostId = table.Column<Guid>(type: "uuid", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_RatedPosts", x => new { x.UserId, x.PostId });
- table.ForeignKey(
- name: "FK_RatedPosts_AspNetUsers_UserId",
- column: x => x.UserId,
- principalTable: "AspNetUsers",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_RatedPosts_Posts_PostId",
- column: x => x.PostId,
- principalTable: "Posts",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "UserRates",
- columns: table => new
- {
- Id = table.Column<Guid>(type: "uuid", nullable: false),
- Liked = table.Column<bool>(type: "boolean", nullable: false),
- PostId = table.Column<Guid>(type: "uuid", nullable: true),
- UserId = table.Column<Guid>(type: "uuid", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_UserRates", x => x.Id);
- table.ForeignKey(
- name: "FK_UserRates_AspNetUsers_UserId",
- column: x => x.UserId,
- principalTable: "AspNetUsers",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
- table.ForeignKey(
- name: "FK_UserRates_Posts_PostId",
- column: x => x.PostId,
- principalTable: "Posts",
- principalColumn: "Id",
- onDelete: ReferentialAction.Restrict);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_RatedPosts_PostId",
- table: "RatedPosts",
- column: "PostId");
-
- migrationBuilder.CreateIndex(
- name: "IX_UserRates_PostId",
- table: "UserRates",
- column: "PostId");
-
- migrationBuilder.CreateIndex(
- name: "IX_UserRates_UserId",
- table: "UserRates",
- column: "UserId");
- }
- }
-}
diff --git a/src/Data/DevHive.Data/Migrations/20210328161726_Profile_Pic_Property_Alter.Designer.cs b/src/Data/DevHive.Data/Migrations/20210407161947_Initial_migration.Designer.cs
index a3fcb2d..34c8300 100644
--- a/src/Data/DevHive.Data/Migrations/20210328161726_Profile_Pic_Property_Alter.Designer.cs
+++ b/src/Data/DevHive.Data/Migrations/20210407161947_Initial_migration.Designer.cs
@@ -10,15 +10,15 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace DevHive.Data.Migrations
{
[DbContext(typeof(DevHiveContext))]
- [Migration("20210328161726_Profile_Pic_Property_Alter")]
- partial class Profile_Pic_Property_Alter
+ [Migration("20210407161947_Initial_migration")]
+ partial class Initial_migration
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("Relational:MaxIdentifierLength", 63)
- .HasAnnotation("ProductVersion", "5.0.3")
+ .HasAnnotation("ProductVersion", "5.0.4")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
modelBuilder.Entity("DevHive.Data.Models.Comment", b =>
diff --git a/src/Data/DevHive.Data/Migrations/20210328161726_Profile_Pic_Property_Alter.cs b/src/Data/DevHive.Data/Migrations/20210407161947_Initial_migration.cs
index 5aca664..841c94d 100644
--- a/src/Data/DevHive.Data/Migrations/20210328161726_Profile_Pic_Property_Alter.cs
+++ b/src/Data/DevHive.Data/Migrations/20210407161947_Initial_migration.cs
@@ -4,7 +4,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace DevHive.Data.Migrations
{
- public partial class Profile_Pic_Property_Alter : Migration
+ public partial class Initial_migration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
diff --git a/src/Data/DevHive.Data/Migrations/DevHiveContextModelSnapshot.cs b/src/Data/DevHive.Data/Migrations/DevHiveContextModelSnapshot.cs
index 242473b..c451979 100644
--- a/src/Data/DevHive.Data/Migrations/DevHiveContextModelSnapshot.cs
+++ b/src/Data/DevHive.Data/Migrations/DevHiveContextModelSnapshot.cs
@@ -16,7 +16,7 @@ namespace DevHive.Data.Migrations
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("Relational:MaxIdentifierLength", 63)
- .HasAnnotation("ProductVersion", "5.0.3")
+ .HasAnnotation("ProductVersion", "5.0.4")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
modelBuilder.Entity("DevHive.Data.Models.Comment", b =>
diff --git a/src/Data/DevHive.Data/Repositories/FriendshipRepository.cs b/src/Data/DevHive.Data/Repositories/FriendshipRepository.cs
new file mode 100644
index 0000000..94fdec3
--- /dev/null
+++ b/src/Data/DevHive.Data/Repositories/FriendshipRepository.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DevHive.Data.Models;
+
+namespace DevHive.Data.Repositories
+{
+ public class FriendshipRepository : BaseRepository<Friendship>
+ {
+ private readonly DevHiveContext _context;
+
+ public FriendshipRepository(DevHiveContext context)
+ : base(context)
+ {
+ this._context = context;
+ }
+ }
+}
diff --git a/src/Services/DevHive.Services.Models/User/FriendshipServiceModel.cs b/src/Services/DevHive.Services.Models/User/FriendshipServiceModel.cs
new file mode 100644
index 0000000..b37daf2
--- /dev/null
+++ b/src/Services/DevHive.Services.Models/User/FriendshipServiceModel.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace DevHive.Services.Models.User
+{
+ public class FriendshipServiceModel
+ {
+ public Guid BaseUserId { get; set; }
+
+ public Guid FriendUserId { get; set; }
+ }
+}
diff --git a/src/Services/DevHive.Services/Configurations/Mapping/UserMappings.cs b/src/Services/DevHive.Services/Configurations/Mapping/UserMappings.cs
index 99b41a8..5a39f73 100644
--- a/src/Services/DevHive.Services/Configurations/Mapping/UserMappings.cs
+++ b/src/Services/DevHive.Services/Configurations/Mapping/UserMappings.cs
@@ -23,6 +23,9 @@ namespace DevHive.Services.Configurations.Mapping
CreateMap<User, UpdateUserServiceModel>()
.ForMember(dest => dest.ProfilePictureURL, src => src.MapFrom(p => p.ProfilePicture.PictureURL));
CreateMap<User, FriendServiceModel>();
+
+ CreateMap<UserServiceModel, UpdateUserServiceModel>();
+ CreateMap<UserServiceModel, UpdateFriendServiceModel>();
}
}
}
diff --git a/src/Services/DevHive.Services/Interfaces/IFriendsService.cs b/src/Services/DevHive.Services/Interfaces/IFriendsService.cs
index 6ab7b90..e337793 100644
--- a/src/Services/DevHive.Services/Interfaces/IFriendsService.cs
+++ b/src/Services/DevHive.Services/Interfaces/IFriendsService.cs
@@ -5,7 +5,7 @@ namespace DevHive.Services.Interfaces
{
public interface IFriendsService
{
- Task<object> AddFriend(Guid userId, Guid friendId);
- Task<object> RemoveFriend(Guid userId, Guid friendId);
+ Task<bool> AddFriend(Guid userId, Guid friendId);
+ Task<bool> RemoveFriend(Guid userId, Guid friendId);
}
}
diff --git a/src/Services/DevHive.Services/Services/FriendsService.cs b/src/Services/DevHive.Services/Services/FriendsService.cs
index 7577572..6d4ee73 100644
--- a/src/Services/DevHive.Services/Services/FriendsService.cs
+++ b/src/Services/DevHive.Services/Services/FriendsService.cs
@@ -1,8 +1,10 @@
using System;
+using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using DevHive.Common.Jwt.Interfaces;
using DevHive.Services.Interfaces;
+using DevHive.Services.Models.User;
namespace DevHive.Services.Services
{
@@ -10,25 +12,40 @@ namespace DevHive.Services.Services
{
private readonly IUserService _userService;
private readonly IMapper _userMapper;
- private readonly IJwtService _jwtService;
public FriendsService(IUserService userService,
- IMapper mapper,
- IJwtService jwtService)
+ IMapper mapper)
{
this._userService = userService;
this._userMapper = mapper;
- this._jwtService = jwtService;
}
- public async Task<object> AddFriend(Guid userId, Guid friendId)
+ public async Task<bool> AddFriend(Guid userId, Guid friendId)
{
- return new { Message = "FUCK YOU" };
+ UserServiceModel user = await this._userService.GetUserById(userId);
+ UserServiceModel friendUser = await this._userService.GetUserById(friendId);
+
+ UpdateUserServiceModel updateUser = this._userMapper.Map<UpdateUserServiceModel>(user);
+ UpdateFriendServiceModel updatefriendUser = this._userMapper.Map<UpdateFriendServiceModel>(friendUser);
+
+ updateUser.Friends.Add(updatefriendUser);
+
+ return (await this._userService.UpdateUser(updateUser))
+ .Friends.Any(x => x.Id == friendId);
}
- public async Task<object> RemoveFriend(Guid userId, Guid friendId)
+ public async Task<bool> RemoveFriend(Guid userId, Guid friendId)
{
- return new { Message = "FUCK YOU" };
+ UserServiceModel user = await this._userService.GetUserById(userId);
+ UserServiceModel friendUser = await this._userService.GetUserById(friendId);
+
+ UpdateUserServiceModel updateUser = this._userMapper.Map<UpdateUserServiceModel>(user);
+ UpdateFriendServiceModel updatefriendUser = this._userMapper.Map<UpdateFriendServiceModel>(friendUser);
+
+ updateUser.Friends.Remove(updatefriendUser);
+
+ return !(await this._userService.UpdateUser(updateUser))
+ .Friends.Any(x => x.Id == friendId);
}
}
}
diff --git a/src/Web/DevHive.Web/Controllers/FriendsController.cs b/src/Web/DevHive.Web/Controllers/FriendsController.cs
index 00d70a4..9f3ec13 100644
--- a/src/Web/DevHive.Web/Controllers/FriendsController.cs
+++ b/src/Web/DevHive.Web/Controllers/FriendsController.cs
@@ -34,7 +34,9 @@ namespace DevHive.Web.Controllers
if (!this._jwtService.ValidateToken(userId, authorization))
return new UnauthorizedResult();
- return null;
+ return (await this._friendsService.AddFriend(userId, friendId)) ?
+ new OkResult() :
+ new BadRequestResult();
}
[HttpDelete]
@@ -44,7 +46,9 @@ namespace DevHive.Web.Controllers
if (!this._jwtService.ValidateToken(userId, authorization))
return new UnauthorizedResult();
- return null;
+ return (await this._friendsService.RemoveFriend(userId, friendId)) ?
+ new OkResult() :
+ new BadRequestResult();
}
}
}