Skip to content

Instantly share code, notes, and snippets.

@scottmcarthur
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scottmcarthur/f021d7f81be849e5306a to your computer and use it in GitHub Desktop.
Save scottmcarthur/f021d7f81be849e5306a to your computer and use it in GitHub Desktop.
Example ServiceStack App
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