Skip to content

Commit

Permalink
Added controllers, views, queries etc for Positions and Roles (not co…
Browse files Browse the repository at this point in the history
…mpilable yet, though). Relates to Baud-UCS#27
  • Loading branch information
Berzeger committed Jul 4, 2015
1 parent c0dd771 commit 90689db
Show file tree
Hide file tree
Showing 25 changed files with 638 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,17 @@
<Compile Include="Domain\Deployment\Queries\InstallationQueries.cs" />
<Compile Include="Domain\EntityBase.cs" />
<Compile Include="Domain\IUow.cs" />
<Compile Include="Domain\Security\Contracts\IPositionsRepository.cs" />
<Compile Include="Domain\Security\Contracts\IRolesRepository.cs" />
<Compile Include="Domain\Security\Contracts\ISecurityUow.cs" />
<Compile Include="Domain\Security\Contracts\IUsersRepository.cs" />
<Compile Include="Domain\Security\Entities\Position.cs" />
<Compile Include="Domain\Security\Entities\Role.cs" />
<Compile Include="Domain\Security\Entities\RolePositionLink.cs" />
<Compile Include="Domain\Security\Entities\User.cs" />
<Compile Include="Domain\Security\Entities\UserPositionLink.cs" />
<Compile Include="Domain\Security\Queries\PositionQueries.cs" />
<Compile Include="Domain\Security\Queries\RoleQueries.cs" />
<Compile Include="Domain\Security\Queries\UserQueries.cs" />
<Compile Include="Providers\SimpleCurrentUserProvider.cs" />
<Compile Include="Providers\WebApiAgentAdapterProvider.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Baud.Deployment.BusinessLogic.Domain.Security.Entities;

namespace Baud.Deployment.BusinessLogic.Domain.Security.Contracts
{
public interface IPositionsRepository
{
IQueryable<Position> GetPositions();

Position GetPositionDetail(short id);

void UpdatePosition(short id, Position position);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Baud.Deployment.BusinessLogic.Domain.Security.Entities;

namespace Baud.Deployment.BusinessLogic.Domain.Security.Contracts
{
public interface IRolesRepository
{
IQueryable<Role> GetRoles();

Role GetRoleDetail(short id);

void UpdateRole(short id, Role role);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,9 @@ namespace Baud.Deployment.BusinessLogic.Domain.Security.Contracts
public interface ISecurityUow : IUow
{
IUsersRepository Users { get; }

IRolesRepository Roles { get; }

IPositionsRepository Positions { get; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Baud.Deployment.BusinessLogic.Domain.Security.Entities;

namespace Baud.Deployment.BusinessLogic.Domain.Security.Queries
{
public static class PositionQueries
{
public static IQueryable<Position> FilterByID(this IQueryable<Position> query, int positionID)
{
return query.Where(x => x.ID == positionID);
}

public static IQueryable<Position> OnlyActive(this IQueryable<Position> query)
{
return query.Where(x => !x.IsActive);
}

public static IQueryable<Position> OnlyInactive(this IQueryable<Position> query)
{
return query.Where(x => x.IsActive);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Baud.Deployment.BusinessLogic.Domain.Security.Entities;

namespace Baud.Deployment.BusinessLogic.Domain.Security.Queries
{
public static class RoleQueries
{
public static IQueryable<Role> FilterByID(this IQueryable<Role> query, int roleID)
{
return query.Where(x => x.ID == roleID);
}

public static IQueryable<Role> OnlyActive(this IQueryable<Role> query)
{
return query.Where(x => !x.IsActive);
}

public static IQueryable<Role> OnlyInactive(this IQueryable<Role> query)
{
return query.Where(x => x.IsActive);
}
}
}
2 changes: 2 additions & 0 deletions src/Server/DeploymentFramework/Database/Database.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@
<Compile Include="ReflectionDbContextProvider.cs" />
<Compile Include="RepositoryBase.cs" />
<Compile Include="RepositoryProviderBase.cs" />
<Compile Include="Security\PositionsRepository.cs" />
<Compile Include="Security\RolesRepository.cs" />
<Compile Include="Security\SecurityDbContext.cs" />
<Compile Include="Security\SecurityUow.cs" />
<Compile Include="Security\UsersRepository.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Baud.Deployment.BusinessLogic.Domain.Security.Contracts;
using Baud.Deployment.BusinessLogic.Domain.Security.Entities;
using Baud.Deployment.BusinessLogic.Domain.Security.Queries;

namespace Baud.Deployment.Database.Security
{
public class PositionsRepository : RepositoryBase<SecurityDbContext>, IPositionsRepository
{
public PositionsRepository(SecurityDbContext context)
: base(context)
{
}

public IQueryable<Position> GetPositions()
{
return Context.Positions;
}

public Position GetPositionDetail(short id)
{
return Context.Positions.FilterByID(id).FirstOrDefault();
}

public void UpdatePosition(short id, Position position)
{
position.ID = id;

Context.AttachAsModified(position,
x => x.Name,
x => x.IsActive);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Baud.Deployment.BusinessLogic.Domain.Security.Contracts;
using Baud.Deployment.BusinessLogic.Domain.Security.Entities;
using Baud.Deployment.BusinessLogic.Domain.Security.Queries;

namespace Baud.Deployment.Database.Security
{
public class RolesRepository : RepositoryBase<SecurityDbContext>, IRolesRepository
{
public RolesRepository(SecurityDbContext context)
: base(context)
{
}

public IQueryable<Role> GetRoles()
{
return Context.Roles;
}

public Role GetRoleDetail(short id)
{
return Context.Roles.FilterByID(id).FirstOrDefault();
}

public void UpdateRole(short id, Role role)
{
role.ID = id;

Context.AttachAsModified(role,
x => x.Name,
x => x.IsActive);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public SecurityDbContext()
}

public IDbSet<User> Users { get; set; }
public IDbSet<Role> Roles { get; set; }
public IDbSet<Position> Positions { get; set; }

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
Expand Down
10 changes: 10 additions & 0 deletions src/Server/DeploymentFramework/Database/Security/SecurityUow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ public IUsersRepository Users
get { return GetRepository<IUsersRepository>(); }
}

public IRolesRepository Roles
{
get { return GetRepository<IRolesRepository>(); }
}

public IPositionsRepository Positions
{
get { return GetRepository<IPositionsRepository>(); }
}

public SecurityUow(IDbContextProvider<SecurityDbContext> contextProvider, IRepositoryProvider<SecurityDbContext> repositoryProvider, ICurrentUserProvider currentUserProvider, IDateTimeProvider dateTimeProvider)
: base(contextProvider, repositoryProvider, currentUserProvider, dateTimeProvider)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Baud.Deployment.BusinessLogic.Domain.Security.Contracts;
using Baud.Deployment.Web.Areas.Security.Models.Positions;
using Baud.Deployment.Web.Framework.Web;

namespace Baud.Deployment.Web.Areas.Security.Controllers
{
public partial class PositionsController : Controller
{
private readonly Func<ISecurityUow> _securityUow;

public PositionsController(Func<ISecurityUow> securityUow)
{
_securityUow = securityUow;
}

public ActionResult Index(IndexFilter filter, PagingData paging)
{
paging.PageSize = 2; // only for testing

ViewBag.Filter = filter;

using (var uow = _securityUow())
{
var positionsQuery = uow.Positions.GetPositions();
positionsQuery = filter.Apply(positionsQuery);
var data = positionsQuery.ToPagedList(paging);

return View(data);
}
}

public virtual ActionResult Detail(short id)
{
using (var uow = _securityUow())
{
var position = uow.Positions.GetPositionDetail(id);

if (position == null)
{
return HttpNotFound();
}

return View(position);
}
}

public virtual ActionResult Edit(short id)
{
using (var uow = _securityUow())
{
var position = uow.Positions.GetPositionDetail(id);

if (position == null)
{
return HttpNotFound();
}

return View(position);
}
}
// TODO: T4 template for Actions
[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult Edit(short id, FormCollection form)
{
using (var uow = _securityUow())
{
var position = uow.Positions.GetPositionDetail(id);

if (position == null)
{
return HttpNotFound();
}

if (!TryUpdateModel(position))
{
return View(position);
}

uow.Positions.UpdatePosition(id, position);
uow.Commit();

// TODO add confirmation toast message
return RedirectToAction(Actions.Detail(id));
}
}
}
}
Loading

0 comments on commit 90689db

Please sign in to comment.