добавил логики
All checks were successful
Create and publish a Docker image / Publish image (push) Successful in 1m48s
Create and publish a Docker image / Deploy image (push) Successful in 35s

This commit is contained in:
Vitalick Kovalenko 2023-12-23 12:06:50 +03:00
parent dba01cdcc6
commit 4ca6c0da9b
4 changed files with 385 additions and 32 deletions

View File

@ -3,6 +3,7 @@ using Mapster;
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Google; using Microsoft.AspNetCore.Authentication.Google;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
@ -11,23 +12,38 @@ namespace CyberBoom.Controllers;
[ApiController] [ApiController]
[Route("/api/[controller]")] [Route("/api/[controller]")]
public class UserController : ControllerBase public class UsersController : ControllerBase
{ {
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<UserController> _logger;
private readonly ApplicationContext _applicationContext; private readonly ApplicationContext _applicationContext;
public UserController(ILogger<UserController> logger, ApplicationContext applicationContext) private readonly UserManager<User> _userManager;
public UsersController(ApplicationContext applicationContext, UserManager<User> userManager)
{ {
_logger = logger;
_applicationContext = applicationContext; _applicationContext = applicationContext;
_userManager = userManager;
} }
[HttpPost]
public async Task<IActionResult> Post([FromForm]UserPost user)
{
await user.Avatar.WriteFileToDirectory();
var userWr = new User {
AvatarUrl = user.Avatar.FileName,
UserName = user.Username
};
await _userManager.CreateAsync(userWr);
return Ok(
new {
userWr.Id
}
);
}
// [HttpGet("google-auth")] // [HttpGet("google-auth")]
// public IActionResult Regiester() // public IActionResult Regiester()
@ -66,18 +82,15 @@ public class UserController : ControllerBase
[Route("/api/[controller]")] [Route("/api/[controller]")]
public class MeetingsController : ControllerBase public class MeetingsController : ControllerBase
{ {
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<UserController> _logger;
private readonly ApplicationContext _applicationContext; private readonly ApplicationContext _applicationContext;
public MeetingsController(ILogger<UserController> logger, ApplicationContext applicationContext) public MeetingsController(ApplicationContext applicationContext)
{ {
_logger = logger;
_applicationContext = applicationContext; _applicationContext = applicationContext;
} }
@ -85,8 +98,8 @@ public class MeetingsController : ControllerBase
[HttpPost] [HttpPost]
public async Task<IActionResult> Post([FromForm]PostMeetingDto meeting) public async Task<IActionResult> Post([FromForm]PostMeetingDto meeting)
{ {
await meeting.SpeackerImage.WriteFileToDirectory(); await meeting.SpeackerImage.WriteFilesToDirectory();
await meeting.PlaceImages.WriteFileToDirectory(); await meeting.PlaceImages.WriteFilesToDirectory();
var meetingWrite = meeting.Adapt<Meeting>(); var meetingWrite = meeting.Adapt<Meeting>();
meetingWrite.SpeackerImage = meeting.SpeackerImage.JoinFileNames(); meetingWrite.SpeackerImage = meeting.SpeackerImage.JoinFileNames();
@ -105,8 +118,8 @@ public class MeetingsController : ControllerBase
[HttpPut] [HttpPut]
public async Task<IActionResult> Put([FromForm]PutMeetingDto meeting) public async Task<IActionResult> Put([FromForm]PutMeetingDto meeting)
{ {
await meeting.SpeackerImage.WriteFileToDirectory(); await meeting.SpeackerImage.WriteFilesToDirectory();
await meeting.PlaceImages.WriteFileToDirectory(); await meeting.PlaceImages.WriteFilesToDirectory();
var meetingWrite = meeting.Adapt<Meeting>(); var meetingWrite = meeting.Adapt<Meeting>();
@ -139,3 +152,213 @@ public class MeetingsController : ControllerBase
return Ok(meetings); return Ok(meetings);
} }
} }
[ApiController]
[Route("/api/[controller]")]
public class ReviewsController : ControllerBase
{
private readonly ApplicationContext _applicationContext;
public ReviewsController(ApplicationContext applicationContext)
{
_applicationContext = applicationContext;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] PostReviewDto review)
{
var dbWr = review.Adapt<Review>();
await _applicationContext.Reviews.AddAsync(dbWr);
await _applicationContext.SaveChangesAsync();
return Ok(new {
dbWr.Id
});
}
[HttpPut]
public async Task<IActionResult> Put([FromBody]PutReviewDto review)
{
var fReview = await _applicationContext.Reviews.FirstAsync(r => r.Id == review.Id);
fReview.Text = review.Text;
fReview.Score = review.Score;
fReview.Date = review.Date;
await _applicationContext.SaveChangesAsync();
return Ok();
}
[HttpGet]
public async Task<IActionResult> Get(int id)
{
var review = await _applicationContext.Reviews
.Include(c => c.User)
.FirstAsync(s => s.Id == id);
return Ok(review);
}
[HttpGet("list")]
public IActionResult GetList(int offset, int limit)
{
var reviews = _applicationContext.Reviews
.Include(c => c.User)
.Skip(offset)
.Take(limit);
return Ok(reviews);
}
}
[ApiController]
[Route("/api/[controller]")]
public class ReactionsController : ControllerBase
{
private readonly ApplicationContext _applicationContext;
public ReactionsController(ApplicationContext applicationContext)
{
_applicationContext = applicationContext;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] PostReactionDto reaction)
{
var dbWr = reaction.Adapt<Reaction>();
await _applicationContext.Reactions.AddAsync(dbWr);
await _applicationContext.SaveChangesAsync();
return Ok(new {
dbWr.Id
});
}
[HttpDelete]
public async Task<IActionResult> Delete(long id)
{
var fReview = await _applicationContext.Reactions.FirstAsync(r => r.Id == id);
_applicationContext.Reactions.Remove(fReview);
await _applicationContext.SaveChangesAsync();
return Ok();
}
[HttpGet]
public async Task<IActionResult> Get(int id)
{
var review = await _applicationContext.Reviews
.Include(c => c.User)
.FirstAsync(s => s.Id == id);
return Ok(review);
}
[HttpGet("list")]
public IActionResult GetList(int offset, int limit)
{
var reviews = _applicationContext.Reviews
.Include(c => c.User)
.Skip(offset)
.Take(limit);
return Ok(reviews);
}
}
[ApiController]
[Route("/api/users/meetings")]
public class UserWriteToMetingController : ControllerBase
{
private readonly ApplicationContext _applicationContext;
public UserWriteToMetingController(ApplicationContext applicationContext)
{
_applicationContext = applicationContext;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] PostUserWriteToMetingDto write)
{
var dbWr = write.Adapt<UserWriteToMeting>();
await _applicationContext.UserWriteToMetings.AddAsync(dbWr);
await _applicationContext.SaveChangesAsync();
return Ok(new {
dbWr.Id
});
}
[HttpDelete]
public async Task<IActionResult> Delete(long id)
{
var fReview = await _applicationContext.UserWriteToMetings.FirstAsync(r => r.Id == id);
_applicationContext.UserWriteToMetings.Remove(fReview);
await _applicationContext.SaveChangesAsync();
return Ok();
}
[HttpGet]
public async Task<IActionResult> Get(int id)
{
var review = await _applicationContext.UserWriteToMetings
.FirstAsync(s => s.Id == id);
return Ok(review);
}
[HttpGet("list")]
public IActionResult GetList(int offset, int limit)
{
var reviews = _applicationContext.UserWriteToMetings
.Skip(offset)
.Take(limit);
return Ok(reviews);
}
}

View File

@ -4,7 +4,14 @@ using Microsoft.EntityFrameworkCore;
public class User : IdentityUser public class User : IdentityUser
{ {
public string AvatarUrl { get; set; } = null!;
}
public class UserPost
{
public IFormFile Avatar { get; set; } = null!;
public string Username { get; set; } = null!;
} }
public class PostMeetingDto public class PostMeetingDto
@ -36,6 +43,24 @@ public class PostMeetingDto
} }
public class UserWriteToMeting
{
public long Id { get; set; }
public string UserId { get; set; } = null!;
public long MeetingId { get; set; }
}
public class PostUserWriteToMetingDto
{
public string UserId { get; set; } = null!;
public long MeetingId { get; set; }
}
public class PutMeetingDto public class PutMeetingDto
{ {
public long Id { get; set; } public long Id { get; set; }
@ -95,12 +120,110 @@ public class Meeting
public string Tags { get; set; } = null!; public string Tags { get; set; } = null!;
public string VideoUrl { get; set; } = null!; public string VideoUrl { get; set; } = null!;
// public string MeetingChatUrl { get; set; } = null!;
// public string SocialUrls { get; set; } = null!;
}
public class PostReviewDto
{
public long MeetingId { get; set; }
public string UserId { get; set; } = null!;
public string Text { get; set; } = null!;
public int Score { get; set; } = 0;
DateTime _date;
public DateTime Date { get => _date; set => _date = value.ToUniversalTime(); }
} }
public class PutReviewDto
{
public long Id { get; set; }
public string Text { get; set; } = null!;
public int Score { get; set; } = 0;
DateTime _date;
public DateTime Date { get => _date; set => _date = value.ToUniversalTime(); }
}
public class Review
{
public long Id { get; set; }
public long MeetingId { get; set; }
public User User { get; set; } = null!;
public string UserId { get; set; } = null!;
public string Text { get; set; } = null!;
public int Score { get; set; } = 0;
DateTime _date;
public DateTime Date { get => _date; set => _date = value.ToUniversalTime(); }
}
public class PostReactionDto
{
public long ReviewId { get; set; }
public string UserId { get; set; } = null!;
public bool IsLike { get; set; } = true;
}
public class PutReactionDto
{
public long Id { get; set; }
public long ReviewId { get; set; }
public string UserId { get; set; } = null!;
public bool IsLike { get; set; } = true;
}
public class Reaction
{
public long Id { get; set; }
public long ReviewId { get; set; }
public string UserId { get; set; } = null!;
public bool IsLike { get; set; } = true;
}
public class ApplicationContext : IdentityDbContext<User> public class ApplicationContext : IdentityDbContext<User>
{ {
public DbSet<Meeting> Meetings { get; set; } public DbSet<Meeting> Meetings { get; set; }
public DbSet<Review> Reviews { get; set; }
public DbSet<Reaction> Reactions { get; set; }
public DbSet<UserWriteToMeting> UserWriteToMetings { get; set; }
public ApplicationContext(DbContextOptions<ApplicationContext> options) public ApplicationContext(DbContextOptions<ApplicationContext> options)
: base(options) : base(options)
{ {
@ -110,6 +233,11 @@ public class ApplicationContext : IdentityDbContext<User>
protected override void OnModelCreating(ModelBuilder builder) protected override void OnModelCreating(ModelBuilder builder)
{ {
base.OnModelCreating(builder); base.OnModelCreating(builder);
builder.Entity<Meeting>(); builder.Entity<Meeting>().HasMany<Review>().WithOne().HasForeignKey(c => c.MeetingId);
builder.Entity<User>().HasMany<Review>().WithOne(r => r.User).HasForeignKey(c => c.UserId);
builder.Entity<User>().HasMany<Reaction>().WithOne().HasForeignKey(c => c.UserId);
builder.Entity<Review>().HasMany<Reaction>().WithOne().HasForeignKey(c => c.ReviewId);
builder.Entity<Meeting>().HasMany<UserWriteToMeting>().WithOne().HasForeignKey(c => c.MeetingId);
builder.Entity<User>().HasMany<UserWriteToMeting>().WithOne().HasForeignKey(c => c.UserId);
} }
} }

View File

@ -114,17 +114,19 @@ public static class PhileDataHelpers
public static string JoinStrings(this IEnumerable<string> files) => String.Join(FILES_SEPORATOR_IN_STORE, files.Select(s => s)); public static string JoinStrings(this IEnumerable<string> files) => String.Join(FILES_SEPORATOR_IN_STORE, files.Select(s => s));
public static async Task WriteFileToDirectory(this IFormFile file)
public static async Task WriteFileToDirectory(this IEnumerable<IFormFile> files)
{ {
var dir = Directory.CreateDirectory("cyber-boom-files"); var readStream = file.OpenReadStream();
var memstream = new MemoryStream();
await readStream.CopyToAsync(memstream);
await File.WriteAllBytesAsync(Path.Combine("cyber-boom-files", file.FileName), memstream.ToArray());
}
public static async Task WriteFilesToDirectory(this IEnumerable<IFormFile> files)
{
foreach(var file in files) foreach(var file in files)
{ {
var readStream = file.OpenReadStream(); await file.WriteFileToDirectory();
var memstream = new MemoryStream();
await readStream.CopyToAsync(memstream);
await File.WriteAllBytesAsync(Path.Combine(dir.FullName, file.FileName), memstream.ToArray());
} }
} }

View File

@ -7,7 +7,7 @@
} }
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Host=localhost; Database=CyberBoomWellBeing; Username=postgres; Password=supper_password_123" "CONNECTION_STRING": "Host=localhost; Database=CyberBoomWellBeing; Username=postgres; Password=supper_password_123"
}
} }