Skip to content

Commit

Permalink
Renamed projects and added to slides
Browse files Browse the repository at this point in the history
  • Loading branch information
jchannon committed May 9, 2018
1 parent 5923528 commit b34a5a6
Show file tree
Hide file tree
Showing 57 changed files with 862 additions and 189 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.CastMembers
{
using System.Collections.Generic;
using Models;

public static class GetCastByFilmIdQuery
{
public static IEnumerable<CastMember> Execute(int filmId)
{
//Do some SQL

return new[] { new CastMember { Name = "John Travolta" }, new CastMember { Name = "Samuel L Jackson" } };
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Directors
{
using Models;

public static class GetDirectorByIdQuery
{
public static Director Execute(int id)
{
//Do some SQL

return new Director { Name = "Steven Spielberg" };
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films.CreateFilm
{
using System;
using Models;

public static class CreateFilmRoute
{
public static void Handle(Film film, ValidUserDelegate validUserQuery)
{
if (!validUserQuery())
{
throw new InvalidOperationException();
}

//Do some special MEGA CORP business validation

//Save to database by writing SQL here
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films
{
using System.Collections.Generic;
using Models;

public delegate Film ListFilmByIdDelegate(int id);

public delegate void CreateFilmDelegate(Film film);

public delegate void DeleteFilmDelegate(int id);

public delegate IEnumerable<Film> ListFilmsDelegate();

public delegate void UpdateFilmDelegate(int id, Film film);

public delegate bool ValidUserDelegate();

public delegate Director GetDirectorByIdDelegate(int id);

public delegate IEnumerable<CastMember> GetCastByFilmIdDelegate(int filmId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films.DeleteFilm
{
using System;

public static class DeleteFilmRoute
{
public static void Handle(int id, ValidUserDelegate validUserQuery)
{
if (!validUserQuery())
{
throw new InvalidOperationException();
}

//Write some SQL to delete from DB
}
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
namespace FunctionalProject.Features.NamedDelegatesFilms.Films
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films
{
using System;
using System.Threading.Tasks;
using Botwin;
using Botwin.ModelBinding;
using Botwin.Request;
using Botwin.Response;
using Carter;
using Carter.ModelBinding;
using Carter.Request;
using Carter.Response;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Models;

/*** NO ATTRIBUTES ANYWHERE!!! ***/

public class FilmsModule : BotwinModule
public class FilmsModule : CarterModule
{
public FilmsModule() : base("/api/delegate/films")
public FilmsModule() : base("/api/delegate/films") // --> REPLACE ATTRIBUTES WITH METHOD CALLS ***/
{
/*** REPLACE ATTRIBUTES WITH METHOD CALLS ***/
//this.RequiresAuthentication();


/*** REPLACE ATTRIBUTES WITH METHOD CALLS ***/
this.Get("/", this.GetFilms);
this.Get("/{id:int}", this.GetFilmById);
this.Put("/{id:int}", this.UpdateFilm);
Expand All @@ -23,6 +30,7 @@ public FilmsModule() : base("/api/delegate/films")

private async Task CreateFilm(HttpContext context)
{
/*** REPLACE ATTRIBUTES WITH METHOD CALLS ***/
var result = context.Request.BindAndValidate<Film>();

if (!result.ValidationResult.IsValid)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films.ListFilmById
{
using Models;

public static class ListFilmByIdRoute
{
public static Film Handle(int id, ListFilmByIdDelegate listFilmById, GetDirectorByIdDelegate getDirectorByIdDelegate, GetCastByFilmIdDelegate getCastByFilmIdDelegateQuery)
{
var film = listFilmById(id);

if (film == null)
{
return null;
}

var director = getDirectorByIdDelegate(film.DirectorId);
film.Director = director;

var cast = getCastByFilmIdDelegateQuery(id);
film.Cast = cast;

return film;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films.ListFilms
{
using System.Collections.Generic;
using Models;

public static class ListFilmsRoute
{
public static IEnumerable<Film> Handle()
{
return new[] { new Film { Id = 1, Name = "Pulp Fiction" }, new Film { Id = 2, Name = "Trainspotting" } };
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films.ListFilmsByIdQuery
{
using Models;

public static class ListFilmsByIdQuery
{
public static Film Execute(int id)
{
return new Film { Id = 1, Name = "Pulp Fiction", DirectorId = 1 };
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films.Permissions
{
using System;

public static class ValidUserQuery
{
public static bool Execute()
{
return new Random().Next() % 2 == 0;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films
{
using FunctionalCarterProject.Features.NamedDelegatesFilms.CastMembers;
using FunctionalCarterProject.Features.NamedDelegatesFilms.Directors;
using FunctionalCarterProject.Features.NamedDelegatesFilms.Films.CreateFilm;
using FunctionalCarterProject.Features.NamedDelegatesFilms.Films.DeleteFilm;
using FunctionalCarterProject.Features.NamedDelegatesFilms.Films.ListFilmById;
using FunctionalCarterProject.Features.NamedDelegatesFilms.Films.ListFilms;
using FunctionalCarterProject.Features.NamedDelegatesFilms.Films.Permissions;
using FunctionalCarterProject.Features.NamedDelegatesFilms.Films.UpdateFilm;

public static class RouteHandlers
{
public static CreateFilmDelegate CreateFilmHandler;

public static ListFilmByIdDelegate ListFilmByIdHandler;

public static DeleteFilmDelegate DeleteFilmHandler;

public static ListFilmsDelegate ListFilmsHandler;

public static UpdateFilmDelegate UpdateFilmHandler;

static RouteHandlers()
{
CreateFilmHandler = film => CreateFilmRoute.Handle(film, () => ValidUserQuery.Execute());

DeleteFilmHandler = id => DeleteFilmRoute.Handle(id, () => ValidUserQuery.Execute());

ListFilmByIdHandler = id => ListFilmByIdRoute.Handle(
id,
filmId => ListFilmsByIdQuery.ListFilmsByIdQuery.Execute(id),
dirId => GetDirectorByIdQuery.Execute(dirId),
filmId => GetCastByFilmIdQuery.Execute(id)
);

ListFilmsHandler = () => ListFilmsRoute.Handle();

UpdateFilmHandler = (id, film) => UpdateFilmRoute.Handle(
id,
film,
() => ValidUserQuery.Execute(),
filmId => ListFilmsByIdQuery.ListFilmsByIdQuery.Execute(filmId));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
namespace FunctionalCarterProject.Features.NamedDelegatesFilms.Films.UpdateFilm
{
using System;
using Models;

public static class UpdateFilmRoute
{
public static void Handle(int id, Film film, ValidUserDelegate validUserQuery, ListFilmByIdDelegate listFilmById)
{
if (!validUserQuery())
{
throw new InvalidOperationException();
}

//Do some special MEGA CORP business validation

var existingFilm = listFilmById(id);

existingFilm.Name = film.Name;
existingFilm.Budget = film.Budget;
existingFilm.Language = film.Language;

//Write some SQL to store in db
}
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<AssemblyName>BotwinMediator</AssemblyName>
<AssemblyName>FunctionalCarterProject</AssemblyName>
<OutputType>Exe</OutputType>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.0" />
<PackageReference Include="Botwin" Version="3.0.0" />
<PackageReference Include="Carter" Version="3.6.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
Expand Down
16 changes: 16 additions & 0 deletions FunctionalCarterProject/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace FunctionalCarterProject
{
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

public class Program
{
public static void Main(string[] args)
{
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build()
.Run();
}
}
}
20 changes: 20 additions & 0 deletions FunctionalCarterProject/Startup.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace FunctionalCarterProject
{
using Carter;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//services.AddCarter(Assembly.GetCallingAssembly(), typeof(FilmValidator).Assembly);
services.AddCarter();
}

public void Configure(IApplicationBuilder app)
{
app.UseCarter();
}
}
}
Loading

0 comments on commit b34a5a6

Please sign in to comment.