создано рест апи

This commit is contained in:
bekodeg 2024-05-12 17:52:28 +04:00
parent 50b76d845f
commit f2e10c6085
26 changed files with 1175 additions and 0 deletions

25
RDBMS_lab4.sln Normal file
View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.9.34728.123
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RDBMS_lab4", "RDBMS_lab4\RDBMS_lab4.csproj", "{B2AF25A1-69D5-4F49-8DBB-366D9E292A32}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B2AF25A1-69D5-4F49-8DBB-366D9E292A32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B2AF25A1-69D5-4F49-8DBB-366D9E292A32}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B2AF25A1-69D5-4F49-8DBB-366D9E292A32}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B2AF25A1-69D5-4F49-8DBB-366D9E292A32}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7D86C303-8013-479C-86FC-CF7AB9270293}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,108 @@
using Microsoft.AspNetCore.Mvc;
using RDBMS_lab4.ViewModels;
namespace RDBMS_lab4.Controllers
{
[Route("api/[controller]")]
public class BuyersController : Controller
{
public BuyersController()
{
}
[HttpGet("get")]
public IActionResult get()
{
try
{
using var context = new beautySalonContext();
var res = context.Buyers.Select(b => new BuyerViue(b)).ToList();
return Ok(res);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpGet("get/{Id}")]
public IActionResult get([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Buyers.FirstOrDefault(b => b.Id == Id);
if (res == null)
{
return Ok(null);
}
return Ok(new BuyerViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPost("create")]
public IActionResult create([FromBody] BuyerViue buyer)
{
try
{
using var context = new beautySalonContext();
var res = context.Buyers.Add(new() {
Name = buyer.Name,
Telephon = buyer.Telephon
});
context.SaveChanges();
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new BuyerViue(res.Entity));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPut("update")]
public IActionResult update([FromBody] BuyerViue buyer)
{
try
{
using var context = new beautySalonContext();
var res = context.Buyers.FirstOrDefault(b => b.Id == buyer.Id);
res.Telephon = buyer.Telephon;
res.Name = buyer.Name;
context.SaveChanges();
return Ok(new BuyerViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpDelete("delete/{Id}")]
public IActionResult delete([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Buyers.FirstOrDefault(b => b.Id == Id);
if (res != null)
{
context.Buyers.Remove(res);
context.SaveChanges();
}
if (res == null)
{
return BadRequest( new NullReferenceException());
}
return Ok(new BuyerViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}

View File

@ -0,0 +1,111 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using RDBMS_lab4.Models;
using RDBMS_lab4.ViewModels;
namespace RDBMS_lab4.Controllers
{
[Route("api/[controller]")]
public class PostsController : Controller
{
public PostsController()
{
}
[HttpGet("get")]
public IActionResult get()
{
try
{
using var context = new beautySalonContext();
var res = context.Posts.Include(p => p.Services).Select(p => new PostViue(p)).ToList();
return Ok(res);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpGet("get/{Id}")]
public IActionResult get([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Posts.Include(p => p.Services).FirstOrDefault(p => p.Id == Id);
if (res == null)
{
return Ok(null);
}
return Ok(new PostViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPost("create")]
public IActionResult create([FromBody] PostViue post)
{
try
{
using var context = new beautySalonContext();
var res = context.Posts.Add(new()
{
Name = post.Name,
Services = context.Services.Where(s => post.Services.Contains(s.Id)).ToList()
});
context.SaveChanges();
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new PostViue(res.Entity));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPut("update")]
public IActionResult update([FromBody] PostViue post)
{
try
{
using var context = new beautySalonContext();
var res = context.Posts.Include(p => p.Services).FirstOrDefault(p => p.Id == post.Id);
res.Name = post.Name;
res.Services = context.Services.Where(s => post.Services.Contains(s.Id)).ToList();
context.SaveChanges();
return Ok(new PostViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpDelete("delete/{Id}")]
public IActionResult delete([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Posts.FirstOrDefault(p => p.Id == Id);
if (res != null)
{
context.Posts.Remove(res);
context.SaveChanges();
}
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new PostViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}

View File

@ -0,0 +1,112 @@
using Microsoft.AspNetCore.Mvc;
using RDBMS_lab4.Models;
using RDBMS_lab4.ViewModels;
using System.Xml.Linq;
namespace RDBMS_lab4.Controllers
{
public class ServicesController : Controller
{
public ServicesController()
{
}
[HttpGet("get")]
public IActionResult get()
{
try
{
using var context = new beautySalonContext();
var res = context.Services.Select(b => new ServiceViue(b)).ToList();
return Ok(res);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpGet("get/{Id}")]
public IActionResult get([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Services.FirstOrDefault(b => b.Id == Id);
if (res == null)
{
return Ok(null);
}
return Ok(new ServiceViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPost("create")]
public IActionResult create([FromBody] ServiceViue service)
{
try
{
using var context = new beautySalonContext();
var res = context.Services.Add(new()
{
Name = service.Name,
Price = (decimal)service.Price,
Duration = new TimeSpan(service.Duration)
});
context.SaveChanges();
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new ServiceViue(res.Entity));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPut("update")]
public IActionResult update([FromBody] ServiceViue service)
{
try
{
using var context = new beautySalonContext();
var res = context.Services.FirstOrDefault(b => b.Id == service.Id);
res.Name = service.Name;
res.Price = (decimal)service.Price;
res.Duration = new TimeSpan(service.Duration);
context.SaveChanges();
return Ok(new ServiceViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpDelete("delete/{Id}")]
public IActionResult delete([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Services.FirstOrDefault(b => b.Id == Id);
if (res != null)
{
context.Services.Remove(res);
context.SaveChanges();
}
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new ServiceViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}

View File

@ -0,0 +1,115 @@
using Microsoft.AspNetCore.Mvc;
using RDBMS_lab4.Models;
using RDBMS_lab4.ViewModels;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace RDBMS_lab4.Controllers
{
[Route("api/[controller]")]
public class TimetablesController : Controller
{
public TimetablesController()
{
}
[HttpGet("get")]
public IActionResult get()
{
try
{
using var context = new beautySalonContext();
var res = context.Timetables.Select(b => new TimetableViue(b)).ToList();
return Ok(res);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpGet("get/{Id}")]
public IActionResult get([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Timetables.FirstOrDefault(b => b.Id == Id);
if (res == null)
{
return Ok(null);
}
return Ok(new TimetableViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPost("create")]
public IActionResult create([FromBody] TimetableViue timetable)
{
try
{
using var context = new beautySalonContext();
var res = context.Timetables.Add(new()
{
Date = (DateTime)timetable.Date,
Buyerid = (int)(timetable.Buyerid),
Serviceid = (int)(timetable.Serviceid),
Workerid = (int)(timetable.Workerid)
});
context.SaveChanges();
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new TimetableViue(res.Entity));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPut("update")]
public IActionResult update([FromBody] TimetableViue timetable)
{
try
{
using var context = new beautySalonContext();
var res = context.Timetables.FirstOrDefault(b => b.Id == timetable.Id);
res.Date = (DateTime)timetable.Date;
res.Buyerid = (int)(timetable.Buyerid);
res.Serviceid = (int)(timetable.Serviceid);
res.Workerid = (int)(timetable.Workerid);
context.SaveChanges();
return Ok(new TimetableViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpDelete("delete/{Id}")]
public IActionResult delete([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Timetables.FirstOrDefault(b => b.Id == Id);
if (res != null)
{
context.Timetables.Remove(res);
context.SaveChanges();
}
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new TimetableViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}

View File

@ -0,0 +1,110 @@
using Microsoft.AspNetCore.Mvc;
using RDBMS_lab4.Models;
using RDBMS_lab4.ViewModels;
namespace RDBMS_lab4.Controllers
{
[Route("api/[controller]")]
public class WorkersController : Controller
{
public WorkersController()
{
}
[HttpGet("get")]
public IActionResult get()
{
try
{
using var context = new beautySalonContext();
var res = context.Workers.Select(b => new WorkerViue(b)).ToList();
return Ok(res);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpGet("get/{Id}")]
public IActionResult get([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Workers.FirstOrDefault(b => b.Id == Id);
if (res == null)
{
return Ok(null);
}
return Ok(new WorkerViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPost("create")]
public IActionResult create([FromBody] WorkerViue worker)
{
try
{
using var context = new beautySalonContext();
var res = context.Workers.Add(new()
{
Name = worker.Name,
Postid = (int)worker.Postid
});
context.SaveChanges();
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new WorkerViue(res.Entity));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpPut("update")]
public IActionResult update([FromBody] WorkerViue worker)
{
try
{
using var context = new beautySalonContext();
var res = context.Workers.FirstOrDefault(b => b.Id == worker.Id);
res.Postid = (int)worker.Postid;
res.Name = worker.Name;
context.SaveChanges();
return Ok(new WorkerViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[HttpDelete("delete/{Id}")]
public IActionResult delete([FromRoute] int Id)
{
try
{
using var context = new beautySalonContext();
var res = context.Workers.FirstOrDefault(b => b.Id == Id);
if (res != null)
{
context.Workers.Remove(res);
context.SaveChanges();
}
if (res == null)
{
return BadRequest(new NullReferenceException());
}
return Ok(new WorkerViue(res));
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
}
}

View File

@ -0,0 +1,31 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
#nullable disable
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace RDBMS_lab4.Models;
/// <summary>
/// Таблица клиентов
/// </summary>
[Table("buyers")]
public partial class Buyer
{
[Key]
[Column("id")]
public int Id { get; set; }
[Required]
[Column("telephon")]
public string Telephon { get; set; }
[Required]
[Column("name")]
public string Name { get; set; }
[InverseProperty("Buyer")]
public virtual Timetable Timetable { get; set; }
}

32
RDBMS_lab4/Models/Post.cs Normal file
View File

@ -0,0 +1,32 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
#nullable disable
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace RDBMS_lab4.Models;
/// <summary>
/// Таблица с должностями работников
/// </summary>
[Table("posts")]
[Index("Name", Name = "posts_name_name1_key", IsUnique = true)]
public partial class Post
{
[Key]
[Column("id")]
public int Id { get; set; }
[Required]
[Column("name")]
public string Name { get; set; }
[InverseProperty("Post")]
public virtual ICollection<Worker> Workers { get; set; } = new List<Worker>();
[ForeignKey("Postid")]
[InverseProperty("Posts")]
public virtual ICollection<Service> Services { get; set; } = new List<Service>();
}

View File

@ -0,0 +1,38 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
#nullable disable
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace RDBMS_lab4.Models;
/// <summary>
/// Таблица услуг
/// </summary>
[Table("services")]
[Index("Name", Name = "services_name_name1_key", IsUnique = true)]
public partial class Service
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("price")]
public decimal Price { get; set; }
[Column("duration")]
public TimeSpan Duration { get; set; }
[Required]
[Column("name")]
public string Name { get; set; }
[InverseProperty("Service")]
public virtual ICollection<Timetable> Timetables { get; set; } = new List<Timetable>();
[ForeignKey("Serviceid")]
[InverseProperty("Services")]
public virtual ICollection<Post> Posts { get; set; } = new List<Post>();
}

View File

@ -0,0 +1,48 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
#nullable disable
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace RDBMS_lab4.Models;
/// <summary>
/// Таблица расписания, содержит ссылки на клиента, услугу и работника
/// </summary>
[Table("timetable")]
[Index("Buyerid", Name = "fki_timetable_buyerid_fkey")]
[Index("Serviceid", Name = "fki_timetable_serviceid_fkey")]
[Index("Workerid", Name = "fki_timetable_workerid_fkey")]
[Index("Date", "Serviceid", Name = "timetable_date_serviceid_key", IsUnique = true)]
public partial class Timetable
{
[Column("id")]
public int? Id { get; set; }
[Column("date", TypeName = "timestamp without time zone")]
public DateTime Date { get; set; }
[Key]
[Column("buyerid")]
public int Buyerid { get; set; }
[Column("serviceid")]
public int Serviceid { get; set; }
[Column("workerid")]
public int Workerid { get; set; }
[ForeignKey("Buyerid")]
[InverseProperty("Timetable")]
public virtual Buyer Buyer { get; set; }
[ForeignKey("Serviceid")]
[InverseProperty("Timetables")]
public virtual Service Service { get; set; }
[ForeignKey("Workerid")]
[InverseProperty("Timetables")]
public virtual Worker Worker { get; set; }
}

View File

@ -0,0 +1,35 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
#nullable disable
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace RDBMS_lab4.Models;
/// <summary>
/// Таблица работников, содержит ссылку на должность
/// </summary>
[Table("workers")]
[Index("Postid", Name = "fki_workers_postid_fkey")]
public partial class Worker
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("postid")]
public int Postid { get; set; }
[Required]
[Column("name")]
public string Name { get; set; }
[ForeignKey("Postid")]
[InverseProperty("Workers")]
public virtual Post Post { get; set; }
[InverseProperty("Worker")]
public virtual ICollection<Timetable> Timetables { get; set; } = new List<Timetable>();
}

21
RDBMS_lab4/Program.cs Normal file
View File

@ -0,0 +1,21 @@
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseSwagger();
app.UseSwaggerUI();
app.UseAuthorization();
app.MapControllers();
app.Run();

View File

@ -0,0 +1,31 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:55760",
"sslPort": 0
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5198",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.11" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<None Include="efpt.config.json.user" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.2" />
<PackageReference Include="Npgsql" Version="8.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
@RDBMS_lab4_HostAddress = http://localhost:5198
GET {{RDBMS_lab4_HostAddress}}/weatherforecast/
Accept: application/json
###

View File

@ -0,0 +1,19 @@
using RDBMS_lab4.Models;
namespace RDBMS_lab4.ViewModels;
public class BuyerViue
{
public BuyerViue() { }
public BuyerViue(Buyer buyer)
{
Id = buyer.Id;
Name = buyer.Name;
Telephon = buyer.Telephon;
}
public int? Id { get; set; }
public string? Telephon { get; set; }
public string? Name { get; set; }
}

View File

@ -0,0 +1,19 @@
using RDBMS_lab4.Models;
namespace RDBMS_lab4.ViewModels;
public class PostViue
{
public PostViue() { }
public PostViue(Post post)
{
Id = post.Id;
Name = post.Name;
Services = post.Services.Select(s => s.Id).ToList();
}
public int? Id { get; set; }
public string? Name { get; set; }
public List<int> Services { get; set; }
}

View File

@ -0,0 +1,21 @@
using RDBMS_lab4.Models;
namespace RDBMS_lab4.ViewModels;
public class ServiceViue
{
public ServiceViue() { }
public ServiceViue(Service service)
{
Id = service.Id;
Price = service.Price;
Duration = service.Duration.Ticks;
Name = service.Name;
}
public int? Id { get; set; }
public decimal? Price { get; set; }
public long Duration { get; set; }
public string? Name { get; set; }
}

View File

@ -0,0 +1,24 @@
using RDBMS_lab4.Models;
namespace RDBMS_lab4.ViewModels;
public class TimetableViue
{
public TimetableViue() { }
public TimetableViue(Timetable timetable)
{
Id = timetable.Id;
Date = timetable.Date;
Buyerid = timetable.Buyerid;
Serviceid = timetable.Serviceid;
Workerid = timetable.Workerid;
}
public int? Id { get; set; }
public DateTime? Date { get; set; }
public int? Buyerid { get; set; }
public int? Serviceid { get; set; }
public int? Workerid { get; set; }
}

View File

@ -0,0 +1,18 @@
using RDBMS_lab4.Models;
namespace RDBMS_lab4.ViewModels;
public class WorkerViue
{
public WorkerViue() { }
public WorkerViue(Worker worker)
{
Id = worker.Id;
Postid = worker.Postid;
Name = worker.Name;
}
public int? Id { get; set; }
public int? Postid { get; set; }
public string? Name { get; set; }
}

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -0,0 +1,119 @@
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
#nullable disable
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using RDBMS_lab4.Models;
namespace RDBMS_lab4;
public partial class beautySalonContext : DbContext
{
public beautySalonContext()
{
}
public beautySalonContext(DbContextOptions<beautySalonContext> options)
: base(options)
{
}
public virtual DbSet<Buyer> Buyers { get; set; }
public virtual DbSet<Post> Posts { get; set; }
public virtual DbSet<Service> Services { get; set; }
public virtual DbSet<Timetable> Timetables { get; set; }
public virtual DbSet<Worker> Workers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
{
optionsBuilder.UseNpgsql("Host=192.168.1.70;Database=beautySalon;Username=windows;Password=windows");
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Buyer>(entity =>
{
entity.HasKey(e => e.Id).HasName("buyer_pkey");
entity.ToTable("buyers", tb => tb.HasComment("Таблица клиентов"));
entity.Property(e => e.Id).HasDefaultValueSql("nextval('buyer_id_seq'::regclass)");
});
modelBuilder.Entity<Post>(entity =>
{
entity.HasKey(e => e.Id).HasName("Post_pkey");
entity.ToTable("posts", tb => tb.HasComment("Таблица с должностями работников"));
entity.Property(e => e.Id).HasDefaultValueSql("nextval('post_id_seq'::regclass)");
entity.HasMany(d => d.Services).WithMany(p => p.Posts)
.UsingEntity<Dictionary<string, object>>(
"PostService",
r => r.HasOne<Service>().WithMany()
.HasForeignKey("Serviceid")
.HasConstraintName("post_service_serviceid_fkey"),
l => l.HasOne<Post>().WithMany()
.HasForeignKey("Postid")
.HasConstraintName("post_service_postid_fkey"),
j =>
{
j.HasKey("Postid", "Serviceid").HasName("post_service_pkey");
j.ToTable("post_service", tb => tb.HasComment("Связь должностей и услуг"));
j.HasIndex(new[] { "Postid" }, "fki_post_service_postid_fkey");
j.HasIndex(new[] { "Serviceid" }, "fki_post_service_serviceid_fkey");
j.IndexerProperty<int>("Postid").HasColumnName("postid");
j.IndexerProperty<int>("Serviceid").HasColumnName("serviceid");
});
});
modelBuilder.Entity<Service>(entity =>
{
entity.HasKey(e => e.Id).HasName("service_pkey");
entity.ToTable("services", tb => tb.HasComment("Таблица услуг"));
entity.Property(e => e.Id).HasDefaultValueSql("nextval('service_id_seq'::regclass)");
});
modelBuilder.Entity<Timetable>(entity =>
{
entity.HasKey(e => e.Buyerid).HasName("timetable_pkey");
entity.ToTable("timetable", tb => tb.HasComment("Таблица расписания, содержит ссылки на клиента, услугу и работника"));
entity.Property(e => e.Buyerid).ValueGeneratedNever();
entity.Property(e => e.Date).HasDefaultValueSql("CURRENT_DATE");
entity.Property(e => e.Id).ValueGeneratedOnAdd();
entity.HasOne(d => d.Buyer).WithOne(p => p.Timetable).HasConstraintName("timetable_buyerid_fkey");
entity.HasOne(d => d.Service).WithMany(p => p.Timetables).HasConstraintName("timetable_serviceid_fkey");
entity.HasOne(d => d.Worker).WithMany(p => p.Timetables).HasConstraintName("timetable_workerid_fkey");
});
modelBuilder.Entity<Worker>(entity =>
{
entity.HasKey(e => e.Id).HasName("workers_pkey");
entity.ToTable("workers", tb => tb.HasComment("Таблица работников, содержит ссылку на должность"));
entity.Property(e => e.Id).HasDefaultValueSql("nextval('worker_id_seq'::regclass)");
entity.HasOne(d => d.Post).WithMany(p => p.Workers).HasConstraintName("workers_postid_fkey");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

View File

@ -0,0 +1,66 @@
{
"CodeGenerationMode": 3,
"ContextClassName": "beautySalonContext",
"ContextNamespace": null,
"FilterSchemas": false,
"IncludeConnectionString": true,
"ModelNamespace": null,
"OutputContextPath": null,
"OutputPath": "Models",
"PreserveCasingWithRegex": true,
"ProjectRootNamespace": "RDBMS_lab4",
"Schemas": null,
"SelectedHandlebarsLanguage": 3,
"SelectedToBeGenerated": 0,
"T4TemplatePath": null,
"Tables": [
{
"Name": "public.buyers",
"ObjectType": 0
},
{
"Name": "public.post_service",
"ObjectType": 0
},
{
"Name": "public.posts",
"ObjectType": 0
},
{
"Name": "public.services",
"ObjectType": 0
},
{
"Name": "public.timetable",
"ObjectType": 0
},
{
"Name": "public.workers",
"ObjectType": 0
}
],
"UiHint": null,
"UncountableWords": null,
"UseAsyncStoredProcedureCalls": true,
"UseBoolPropertiesWithoutDefaultSql": false,
"UseDatabaseNames": false,
"UseDateOnlyTimeOnly": false,
"UseDbContextSplitting": false,
"UseDecimalDataAnnotationForSprocResult": true,
"UseFluentApiOnly": false,
"UseHandleBars": false,
"UseHierarchyId": false,
"UseInflector": true,
"UseLegacyPluralizer": false,
"UseManyToManyEntity": false,
"UseNoDefaultConstructor": false,
"UseNoNavigations": false,
"UseNoObjectFilter": false,
"UseNodaTime": false,
"UseNullableReferences": false,
"UsePrefixNavigationNaming": false,
"UseSchemaFolders": false,
"UseSchemaNamespaces": false,
"UseSpatial": false,
"UseT4": false
}

5
RDBMS_lab4/libman.json Normal file
View File

@ -0,0 +1,5 @@
{
"version": "1.0",
"defaultProvider": "cdnjs",
"libraries": []
}