Skip to content
Snippets Groups Projects
Commit eac585aa authored by Lucca Santangelo Dodera's avatar Lucca Santangelo Dodera
Browse files

Merge branch 'feature/public-courses' into 'develop'

Feature/public courses

See merge request !49
parents f2235b64 140f2e7d
No related branches found
No related tags found
1 merge request!49Feature/public courses
Pipeline #10669 passed
Showing
with 1189 additions and 3 deletions
......@@ -281,7 +281,22 @@ namespace Tsi1.Api.Controllers
[HttpGet("GetById/{courseId}")]
public async Task<IActionResult> GetById(int courseId)
{
var result = await _courseService.GetById(courseId);
var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
var myUserType = HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role).Value;
int? studentId = null;
if (myUserType == UserTypes.Student)
{
var userResult = await _userService.GetById(userId);
if (userResult.HasError)
{
return BadRequest(userResult.Message);
}
studentId = userResult.Data.Student.Id;
}
var result = await _courseService.GetById(courseId, studentId);
if (result.HasError)
{
return BadRequest(result.Message);
......
......@@ -9,6 +9,7 @@ namespace Tsi1.BusinessLayer.Dtos
{
public string Name { get; set; }
public bool IsTemplate { get; set; }
public bool IsPublic { get; set; }
public bool HasPassword { get; set; }
public string Password { get; set; }
public List<SectionCreateDto> Sections { get; set; }
......
......@@ -11,6 +11,7 @@ namespace Tsi1.BusinessLayer.Dtos
public int TenantId { get; set; }
public bool HasPassword { get; set; }
public string Password { get; set; }
public bool IsPublic { get; set; }
public List<SectionDetailDto> Sections { get; set; }
}
}
......@@ -6,6 +6,7 @@ namespace Tsi1.BusinessLayer.Dtos
{
public string Name { get; set; }
public bool IsTemplate { get; set; }
public bool IsPublic { get; set; }
public bool HasPassword { get; set; }
public string Password { get; set; }
......
......@@ -6,6 +6,7 @@ namespace Tsi1.BusinessLayer.Dtos
{
public class StudentPreviewDto
{
public int Id { get; set; }
public string IdentityCard { get; set; }
}
}
......@@ -36,6 +36,7 @@ namespace Tsi1.BusinessLayer.Helpers
public const string CourseIsTemplate = "El curso con id '{0}' es un template";
public const string CourseHasNoStudents = "El curso con id '{0}' no tiene estudiantes";
public const string CourseInvalidPassword = "Clave de matriculación incorrecta para el curso {0}";
public const string CourseIsNotPublic = "El curso {0} no es publico";
public const string TenantDoesNotExist = "La Facultad '{0}' no existe";
public const string DuplicateTenantName = "Ya existe una Facultad con nombre '{0}'";
......
......@@ -26,7 +26,7 @@ namespace Tsi1.BusinessLayer.Interfaces
Task<ServiceResult<bool>> RemoveProfessorToCourse(ProfessorCourseDto professorCourseDto);
Task<ServiceResult<List<UserPreviewDto>>> GetProfessors(int courseId);
Task<ServiceResult<CourseDetailDto>> GetById(int courseId);
Task<ServiceResult<CourseDetailDto>> GetById(int courseId, int? studentId = null);
Task<ServiceResult<List<UserPreviewDto>>> GetStudents(int courseId);
}
}
......@@ -410,7 +410,7 @@ namespace Tsi1.BusinessLayer.Services
return result;
}
public async Task<ServiceResult<CourseDetailDto>> GetById(int courseId)
public async Task<ServiceResult<CourseDetailDto>> GetById(int courseId, int? studentId = null)
{
var result = new ServiceResult<CourseDetailDto>();
......@@ -433,6 +433,19 @@ namespace Tsi1.BusinessLayer.Services
return result;
}
if (studentId != null)
{
var studentCourse = await _context.StudentCourses
.FirstOrDefaultAsync(x => x.CourseId == courseId && x.StudentId == studentId);
if (studentCourse == null && !course.IsPublic)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.CourseIsNotPublic, course.Name));
return result;
}
}
result.Data = _mapper.Map<CourseDetailDto>(course);
return result;
......
......@@ -22,6 +22,7 @@ namespace Tsi1.DataLayer.Entities
public bool IsTemplate { get; set; }
public bool HasPassword { get; set; }
public string Password { get; set; }
public bool IsPublic { get; set; }
public Tenant Tenant { get; set; }
public ICollection<StudentCourse> StudentCourses { get; set; }
......
using Microsoft.EntityFrameworkCore.Migrations;
namespace Tsi1.DataLayer.Migrations
{
public partial class courseispublic : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsPublic",
table: "Courses",
nullable: false,
defaultValue: false);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsPublic",
table: "Courses");
}
}
}
......@@ -157,6 +157,9 @@ namespace Tsi1.DataLayer.Migrations
b.Property<bool>("HasPassword")
.HasColumnType("boolean");
b.Property<bool>("IsPublic")
.HasColumnType("boolean");
b.Property<bool>("IsTemplate")
.HasColumnType("boolean");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment