private bool Validiraj(ReportsInsert obj) { UserException ex = new UserException(); if (!OdgovarajuciFajlovi(obj.Prilozi)) { ex.AddError(nameof(obj.Prilozi), "Možete uploadovati samo slike"); } if (ex.Errori.Count > 0) { throw ex; } return(true); }
public SharedModels.Reports Add(ReportsInsert obj, string rootFolder = "content") // razmisliti da se iz httpcontext. izvuce root path aplikacije kako bi se //uploadovo fajl tj da se ovoj metodi posalje taj parametar a ne ovako da ovaj nagadja sa ~/reports // kad se stavi ~ frajer napravi folder koji se zove ~ i onda u njemu reports, ne valja, ne moze tako, dakle on po defaultu kad ides create //directory pravi u ovom svom folderu gdje se pokrece web api, tako da stavit cu content da je folder a u njega reports, pa tamo za igrace //ce biti { Validiraj(obj); using (var transakcija = db.Database.BeginTransaction()) { List <string> bekapPlan = new List <string>(); try { //var bazaObj = mapko.Map<Database.DTOs.Report>(obj); var bazaObj = new Database.DTOs.Report { DatumKreiranja = obj.DatumKreiranja ?? DateTime.Now, Email = obj.Email, Naslov = obj.Naslov, Sadrzaj = obj.Sadrzaj }; bazaObj.Prilozi = new List <Database.DTOs.Attachment>(); db.Reports.Add(bazaObj); db.SaveChanges(); if (obj.Prilozi != null) { foreach (Fajl i in obj.Prilozi) { using (MemoryStream ms = new MemoryStream(i.BinarniZapis)) { //valja istraziti tj kako spremiti u zajednicki folder za webapp i webapi Directory.CreateDirectory(Path.Combine(rootFolder, "reports")); string ImeFajla = Guid.NewGuid().ToString() + "_" + i.Naziv; string pathSpremanja = Path.Combine(rootFolder, "reports", ImeFajla); using (FileStream strim = new FileStream(pathSpremanja, FileMode.Create)) ms.CopyTo(strim); bekapPlan.Add(pathSpremanja); Attachment noviAttachment = new Attachment { DatumUnosa = DateTime.Now, Path = pathSpremanja }; db.Attachments.Add(noviAttachment); bazaObj.Prilozi.Add(noviAttachment); } } db.SaveChanges(); transakcija.Commit(); //ovdje treba pozvati email servis i obavijestiti adminsitratora o novom reportu try { emailServis.PosaljiMejlReport(bazaObj); } catch (Exception) { } var povratni = new SharedModels.Reports { ID = bazaObj.ID, Email = bazaObj.Email, DatumKreiranja = bazaObj.DatumKreiranja, Naslov = bazaObj.Naslov, Sadrzaj = bazaObj.Sadrzaj }; //mapko ovdje ne moze osvojit, zbog problema Prilozi su u klasi database.dtos.reports //tipa list<attachment> dok su u sharedmodels.requests.reportsinsert zbog potrebe prenosa binarnih fajlova u formi list<Fajl> //tako da ovdje svakako ne treba slat fajlove, mada se mogu return(povratni); } } catch (DbUpdateException) { transakcija.Rollback(); foreach (string i in bekapPlan) { if (System.IO.File.Exists(i)) { System.IO.File.Delete(i); } } } UserException ex = new UserException(); ex.AddError("error", "Došlo je do greške prilikom pohrane fajlova, pokušajte ponovo"); throw ex; } }
public Reports Add([FromBody] ReportsInsert obj) { return(reportsService.Add(obj, "content")); }