using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Npgsql; namespace RestaurantWeb2.Pages; public class DataModel : PageModel { public string Table="",Search="",Msg="",Role=""; public bool IsErr,ShowForm; public int EditId; public List Cols=new(),Vals=new(); public List> Rows=new(); static readonly HashSet IntCols = new(){ "год_рождения","вес_г","id_персонала" }; static readonly HashSet DecCols = new(){ "оклад","вес_кг","цена_руб" }; static readonly Dictionary Tbls = new(){ ["Персонал"]=new[]{"id_персонала","фио","год_рождения","должность","оклад","телефон","адрес","паспортные_данные"}, ["Блюда"]=new[]{"id_блюда","блюдо","категория","вес_г"}, ["Склад"]=new[]{"id_ингредиента","ингредиент","вес_кг","цена_руб"}, ["Заказы"]=new[]{"id_заказа","код_заказа","дата_заказа","id_персонала"}, }; public IActionResult OnGet(string? table,string? action,string? search,int? id){ Role=HttpContext.Session.GetString("role")??""; if(Role=="") return RedirectToPage("/Index"); Table=Tbls.ContainsKey(table??"")?table!:"Персонал"; Search=search??""; Cols=Tbls[Table].ToList(); if(action=="delete"&&id.HasValue&&Role=="admin") Del(id.Value); if(action=="edit"&&id.HasValue) LoadEdit(id.Value); if(action=="add") ShowForm=true; Load(); return Page(); } public IActionResult OnPost(string table,int editId,IFormCollection form){ Role=HttpContext.Session.GetString("role")??""; if(Role=="") return RedirectToPage("/Index"); Table=Tbls.ContainsKey(table)?table:"Персонал"; Cols=Tbls[Table].ToList(); var cols=Cols.Skip(1).ToList(); var vals=cols.Select((_,i)=>form[$"f{i+1}"].ToString()).ToList(); try{ using var conn=Db.Conn();conn.Open(); if(editId>0){ var sets=string.Join(",",cols.Select((c,i)=>$"\"{c}\"=@p{i}")); var cmd=new NpgsqlCommand($"UPDATE \"{Table}\" SET {sets} WHERE \"{Cols[0]}\"=@id",conn); for(int i=0;i$"\"{c}\"")); var ps=string.Join(",",cols.Select((_,i)=>$"@p{i}")); var cmd=new NpgsqlCommand($"INSERT INTO \"{Table}\"({cs}) VALUES({ps})",conn); for(int i=0;i$"\"{c}\"")); var sql=$"SELECT {cs} FROM \"{Table}\""; if(!string.IsNullOrEmpty(Search)) sql+=$" WHERE \"{Cols[1]}\" ILIKE @s"; sql+=$" ORDER BY \"{Cols[0]}\""; var cmd=new NpgsqlCommand(sql,conn); if(!string.IsNullOrEmpty(Search)) cmd.Parameters.AddWithValue("s",$"%{Search}%"); using var r=cmd.ExecuteReader(); while(r.Read()){var row=new List();for(int i=0;i$"\"{c}\"")); var cmd=new NpgsqlCommand($"SELECT {cs} FROM \"{Table}\" WHERE \"{Cols[0]}\"=@id",conn); cmd.Parameters.AddWithValue("id",id); using var r=cmd.ExecuteReader(); if(r.Read()) for(int i=1;i