I have this really long httppost action results that I add and update 3 db tables I think it's too long and can get shorter and smarter.
public class AllVm
{
public AllVm()
{
this.wri = new Writer();
this.sub = new Subject();
this.rev = new Review();
}
public Writer wri { get; set; }
public Subject sub { get; set; }
public Review rev { get; set; }
}
}
public ActionResult Review()
{
return View();
}
[HttpPost]
public async Task<ActionResult> Review(AllVm model)
{
var logedInUser = User.Identity.GetUserId();
var memberDetails = (from m in db.member.Where(a => a.ApplicationUserId == logedInUser) select m).FirstOrDefault();
//check if subject name allready exist
var reviewSubject = from c in db.Subject select c.SubjectName.ToString().ToLower();
var match = await reviewSubject.FirstOrDefaultAsync(stringToCheck => stringToCheck.Equals(model.sub.SubjectName.ToLower()));
model.rev.Created = DateTime.Now;
if (ModelState.IsValid)
{
if ((model.sub.SubjectName.ToLower()).Equals(match))
{
var ttt = (from c in db.Subject.Where(aa => aa.SubjectName.ToString().ToLower().Equals(match)) select c);
var GetSubjectId = await (from a in ttt select a.SubjectId).SingleAsync();
if (model.rev.GBU == "Good")
{
var Good = await (from a in ttt select a.Good).SingleAsync();
var bad = await (from a in ttt select a.bad).SingleAsync();
var Ugly = await (from a in ttt select a.Ugly).SingleAsync();
model.sub.bad = bad;
model.sub.Ugly = Ugly;
int iGoodRating = Convert.ToInt32(Good);
iGoodRating++;
model.sub.Good = iGoodRating;
model.sub.SubjectId = GetSubjectId;
db.Entry(model.sub).State = EntityState.Modified;
}
else if (model.rev.GBU == "Bad")
{
var Bad = await (from a in ttt select a.bad).SingleAsync();
var Ugly = await (from a in ttt select a.Ugly).SingleAsync();
var Good = await (from a in ttt select a.Good).SingleAsync();
model.sub.Ugly = Ugly;
model.sub.Good = Good;
int iBadRating = Convert.ToInt32(Bad);
iBadRating++;
model.sub.bad = iBadRating;
model.sub.SubjectId = GetSubjectId;
db.Entry(model.sub).State = EntityState.Modified;
}
else if (model.rev.GBU == "Ugly")
{
var Ugly = await (from a in ttt select a.Ugly).SingleAsync();
var Bad = await (from a in ttt select a.bad).SingleAsync();
var Good = await (from a in ttt select a.Good).SingleAsync();
model.sub.Good = Good;
model.sub.bad = Bad;
int iUglyRating = Convert.ToInt32(Ugly);
iUglyRating++;
model.sub.Ugly = iUglyRating;
model.sub.SubjectId = GetSubjectId;
db.Entry(model.sub).State = EntityState.Modified;
}
model.rev.SubjectId = GetSubjectId;
}
else
{
model.sub.Good = 0;
model.sub.bad = 0;
model.sub.Ugly = 0;
if (model.rev.GBU == "Good")
model.sub.Good = 1;
else if (model.rev.GBU == "Bad")
model.sub.bad = 1;
else if (model.rev.GBU == "Ugly")
model.sub.Ugly = 1;
db.Subject.Add(model.sub);
}
//writer
model.wri.WriterName = memberDetails.Name;
//check if writerId allready in the Db
var WriterMatch = db.Writer.Where(n => n.WriterName.ToLower().Equals(model.wri.WriterName));
if (WriterMatch.Count() > 0)
{
var getWriterId = await (from a in WriterMatch select a.WriterId).SingleAsync();
model.rev.WriterId = getWriterId;
}
else
{
model.wri.WriterName = memberDetails.Name;
db.Writer.Add(model.wri);
}
model.rev.offensive = false;
db.Review.Add(model.rev);
await db.SaveChangesAsync();
return View("index");
}
return View(model);
}
}