Last active
August 29, 2015 14:06
-
-
Save scottmcarthur/f021d7f81be849e5306a to your computer and use it in GitHub Desktop.
Example ServiceStack App
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Linq; | |
using ServiceStack; | |
using System.Data; | |
using System.Collections.Generic; | |
using ServiceStack.DataAnnotations; | |
using ServiceStack.OrmLite; | |
namespace MyApp.Tests | |
{ | |
// Database Model Tables ------------------------------------------------------------------------------------------- | |
public class Table1 | |
{ | |
[AutoIncrement] | |
public int Id { get; set; } | |
public int Data1 { get; set; } | |
public string Data2 { get; set; } | |
public DateTime Timestamp { get; set; } | |
} | |
// Request DTOs ---------------------------------------------------------------------------------------------------- | |
[Route("/Table1","POST")] | |
public class CreateTable1Request : IReturn<Table1CreatedResponse> | |
{ | |
public int Data1 { get; set; } | |
public string Data2 { get; set; } | |
public DateTime Timestamp { get; set; } | |
} | |
[Route("/Table1/Multiple","POST")] | |
public class CreateMultipleTable1Request : List<CreateTable1Request>, IReturn<List<Table1CreatedResponse>> | |
{ | |
} | |
[Route("/Table1/{Id}","GET")] | |
public class ReadTable1Request : IReturn<Table1Response> | |
{ | |
public int Id { get; set; } | |
} | |
[Route("/Table1/{Id}","PUT")] | |
public class UpdateTable1Request : IReturnVoid | |
{ | |
public int Id { get; set; } | |
public int Data1 { get; set; } | |
public string Data2 { get; set; } | |
public DateTime Timestamp { get; set; } | |
} | |
[Route("/Table1/{Id}","DELETE")] | |
public class DeleteTable1Request : IReturnVoid | |
{ | |
public int Id { get; set; } | |
} | |
[Route("/Table1","GET")] | |
public class ListTable1Request : IReturn<List<Table1Response>> | |
{ | |
} | |
// Responses DTOs -------------------------------------------------------------------------------------------------- | |
public class Table1CreatedResponse | |
{ | |
public int Id { get; set; } | |
} | |
public class Table1Response | |
{ | |
public int Id { get; set; } | |
public int Data1 { get; set; } | |
public string Data2 { get; set; } | |
public DateTime Timestamp { get; set; } | |
} | |
// Table1 Service -------------------------------------------------------------------------------------------------- | |
public class Table1Service : Service | |
{ | |
CrudFunctions<Table1> _crud; | |
public CrudFunctions<Table1> Crud | |
{ | |
get | |
{ | |
if(_crud == null) | |
_crud = new CrudFunctions<Table1>(Db); | |
return _crud; | |
} | |
} | |
public Table1CreatedResponse Post(CreateTable1Request request) | |
{ | |
var id = Crud.Create(request.ConvertTo<Table1>()); | |
return new Table1CreatedResponse { Id = id }; | |
} | |
public List<Table1CreatedResponse> Post(CreateMultipleTable1Request request) | |
{ | |
var result = new List<Table1CreatedResponse>(); | |
foreach(var value in request) | |
result.Add(Post(value)); | |
return result; | |
} | |
public Table1Response Get(ReadTable1Request request) | |
{ | |
var record = Crud.Read(request.Id); | |
return record.ConvertTo<Table1Response>(); | |
} | |
public void Put(UpdateTable1Request request) | |
{ | |
Crud.Update(request.ConvertTo<Table1>()); | |
} | |
public void Delete(DeleteTable1Request request) | |
{ | |
Crud.Delete(request.Id); | |
} | |
public List<Table1Response> Get(ListTable1Request request) | |
{ | |
var result = Crud.List(); | |
return result.ConvertAll(r => r.ConvertTo<Table1Response>()).ToList(); | |
} | |
} | |
// Generic CRUD Functions Class ------------------------------------------------------------------------------------ | |
public class CrudFunctions<T> | |
{ | |
public IDbConnection Db { get; private set; } | |
public CrudFunctions(IDbConnection db) | |
{ | |
Db = db; | |
} | |
public int Create(T record) | |
{ | |
var id = Db.Insert(record, selectIdentity: true); | |
return Convert.ToInt32(id); | |
} | |
public T Read(int id) | |
{ | |
return Db.SingleById<T>(id); | |
} | |
public void Update(T record) | |
{ | |
Db.Update<T>(record); | |
} | |
public void Delete(int id) | |
{ | |
Db.DeleteById<T>(id); | |
} | |
public List<T> List() | |
{ | |
return Db.Select<T>(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment