killnine / Hymnstagram

Hymn database and usage API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Hymnstagram

Build status

Types and Relationships

Types

  • Song: Songs have a title, creators, key, solfa starting note, time signature, song number in their songbook, and tunes.
  • Songbook: A songbook contains songs. Songbooks have titles, publishers, ISBNs, creators, and songs.
  • Creator: A creative contributor to either a songbook or song. They have a first and last name, a type of creative they're associated with, and a type of resource they're associated with (Song or Songbook)

Relationship Map: Option 1

  • Songs have 1:N Creators
  • Songbooks have 1:N Creators
  • Songbooks have 1:N Songs

This means that Creators may be duplicated across songs and songbooks, with their own CreativeType and ResourceType fields.

Relationship Map: Option 2

  • Creators have 1:N CreativeTypes
  • Creators have 1:N ResourceTypes
  • Songs have N:M Creators
  • Songbooks have 1:N Creators
  • Songbooks have 1:N Songs

Creators: Stores people (First Name, Last Name) CreativeTypeResourceTypeXref: Maps CreativeTypes (Writer, Composer, Editor, Technical Editor, etc.) to a Specific Resource (Song, Songbook) CreatorCreativeTypeXref: Maps Creators to a specific CreativeType

This means that Creators are more complex, with their own table separate from a CreativeType and ResourceType Xref to specific Songs and Songbooks. But it reduces duplication of data across tables if you have lots of creators who appear multiple times across many roles.

Technologies

  • Asp.net Core 3.0 - Done
  • Serilog - Done
  • StructureMap
  • Dapper
  • Swagger - Done
  • FluentValidation - Done
  • Marvin.Cache.Headers - Done
  • (Miniprofiler)[https://miniprofiler.com/dotnet/ConsoleDotNet]
  • SqlServer
  • (Experimental) IdentityServer
  • (Experimental) PolicyServer
  • (Experimental) Docker
  • (Experimental) (Benchmark.net)[https://benchmarkdotnet.org]
  • (Super Experimental) Kubernetes

Patterns and Practices

  • API

    • GET/POST/PUT/DELETE/PATCH
    • HATEOAS
    • Pagination
      • X-Pagination header
    • Validation (Domain)
      • FluentValidation
    • Caching & Concurrency
      • ETags
      • Cache Headers
    • Documentation
      • Swagger/Swashbuckle
      • XML Comments and #pragma
      • 'ProducesResponseType' for status codes
      • 'Produces' for content type
      • 'Consumes' for content type
      • ActionResult
  • Data Access

    • Repository (Songbook as Aggregate Root)
    • Only allow queries on Indexed fields of database tables (Songbooks, Songs, Creators)
    • Model project defines interface of DAOs. Separate project for implementation
  • General Development

About

Hymn database and usage API


Languages

Language:C# 98.4%Language:CSS 1.4%Language:JavaScript 0.2%