Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 101 additions & 99 deletions GigHub/GigHub/Controllers/API/GigsController.cs
Original file line number Diff line number Diff line change
@@ -1,99 +1,101 @@
using AutoMapper;
using GigHub.Core;
using GigHub.Core.DTOs;
using GigHub.Core.Models;
using Microsoft.AspNet.Identity;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;

namespace GigHub.Controllers.API
{
[Authorize]
public class GigsController : ApiController
{
private readonly IUnitOfWork _unitOfWork;

public GigsController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}


[HttpDelete]
public IHttpActionResult Cancel(int id)
{
var userId = User.Identity.GetUserId();
var gig = _unitOfWork.Gigs.GetGigWithAttendees(id);

if (gig == null || gig.IsCanceled)
return NotFound();

if (gig.ArtistId != userId)
return Unauthorized();

gig.Cancel();

_unitOfWork.Complete();

return Ok();

}

[HttpGet]
public IEnumerable<GigDto> Gigs()
{
var gigs = _unitOfWork.Gigs.GetUpcomingGigs();
return gigs.ToList().Select(Mapper.Map<Gig, GigDto>);
}

[HttpPost]
public IHttpActionResult PostGig(Gig gigViewModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var gig = new Gig
{
ArtistId = User.Identity.GetUserId(),
DateTime = gigViewModel.DateTime,
GenreId = gigViewModel.GenreId,
Venue = gigViewModel.Venue
};

_unitOfWork.Gigs.Add(gig);
_unitOfWork.Complete();

return CreatedAtRoute("DefaultApi", new { id = gig.Id }, gig);
}

[HttpPut]
public IHttpActionResult UpdateGig(int id, Gig gigViewModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != gigViewModel.Id)
{
return BadRequest();
}
var userId = User.Identity.GetUserId();
if (userId != gigViewModel.ArtistId)
{
return StatusCode(HttpStatusCode.Conflict);
}

var gig = _unitOfWork.Gigs.GetGigWithAttendees(gigViewModel.Id);
if (gig == null)
return NotFound();
if (gig.ArtistId != User.Identity.GetUserId())
return BadRequest();
gig.Modify(gigViewModel.DateTime, gigViewModel.Genre.Id, gigViewModel.Venue);
_unitOfWork.Complete();
return StatusCode(HttpStatusCode.NoContent);
}
}
}
using AutoMapper;
using GigHub.Core;
using GigHub.Core.DTOs;
using GigHub.Core.Models;
using Microsoft.AspNet.Identity;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;

namespace GigHub.Controllers.API
{
[Authorize]
public class GigsController : ApiController
{
private readonly IUnitOfWork _unitOfWork;

public GigsController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}


[HttpDelete]
public IHttpActionResult Cancel(int id)
{
var userId = User.Identity.GetUserId();
var gig = _unitOfWork.Gigs.GetGigWithAttendees(id);

if (gig == null || gig.IsCanceled)
return NotFound();

if (gig.ArtistId != userId)
return Unauthorized();

gig.Cancel();

_unitOfWork.Complete();

return Ok();

}

[HttpGet]
public IEnumerable<GigDto> Gigs()
{
var gigs = _unitOfWork.Gigs.GetUpcomingGigs();
return gigs.ToList().Select(Mapper.Map<Gig, GigDto>);
}

[HttpPost]
public IHttpActionResult PostGig(Gig gigViewModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var gig = new Gig
{
ArtistId = User.Identity.GetUserId(),
DateTime = gigViewModel.DateTime,
GenreId = gigViewModel.GenreId,
Venue = gigViewModel.Venue,
VenueAddress = gigViewModel.VenueAddress,
City = gigViewModel.City
};

_unitOfWork.Gigs.Add(gig);
_unitOfWork.Complete();

return CreatedAtRoute("DefaultApi", new { id = gig.Id }, gig);
}

[HttpPut]
public IHttpActionResult UpdateGig(int id, Gig gigViewModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != gigViewModel.Id)
{
return BadRequest();
}
var userId = User.Identity.GetUserId();
if (userId != gigViewModel.ArtistId)
{
return StatusCode(HttpStatusCode.Conflict);
}

var gig = _unitOfWork.Gigs.GetGigWithAttendees(gigViewModel.Id);
if (gig == null)
return NotFound();
if (gig.ArtistId != User.Identity.GetUserId())
return BadRequest();
gig.Modify(gigViewModel.DateTime, gigViewModel.Genre.Id, gigViewModel.Venue, gigViewModel.VenueAddress, gigViewModel.City);
_unitOfWork.Complete();
return StatusCode(HttpStatusCode.NoContent);
}
}
}
93 changes: 93 additions & 0 deletions GigHub/GigHub/Controllers/CitiesController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using GigHub.Core;
using GigHub.Core.Models;
using System.Linq;
using System.Web.Mvc;

namespace GigHub.Controllers
{
[Authorize(Roles = "Admin")]
public class CitiesController : Controller
{
private readonly IUnitOfWork _unitOfWork;

public CitiesController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}

public ActionResult Index()
{
var cities = _unitOfWork.Cities.GetAllCities();
return View(cities);
}

public ActionResult Edit(int id)
{
var city = _unitOfWork.Cities.GetCity(id);
if (city == null)
return HttpNotFound();

return View(city);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(City city)
{
if (!ModelState.IsValid)
return View(city);

var cityInDb = _unitOfWork.Cities.GetCity(city.Id);
if (cityInDb == null)
return HttpNotFound();

cityInDb.Name = city.Name;
cityInDb.IsPartner = city.IsPartner;

_unitOfWork.Complete();

return RedirectToAction("Index");
}

public ActionResult Create()
{
return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(City city)
{
if (!ModelState.IsValid)
return View(city);

_unitOfWork.Cities.Add(city);
_unitOfWork.Complete();

return RedirectToAction("Index");
}

public ActionResult Delete(int id)
{
var city = _unitOfWork.Cities.GetCity(id);
if (city == null)
return HttpNotFound();

return View(city);
}

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
var city = _unitOfWork.Cities.GetCity(id);
if (city == null)
return HttpNotFound();

_unitOfWork.Cities.Remove(city);
_unitOfWork.Complete();

return RedirectToAction("Index");
}
}
}
Loading