Skip to content

Releases: pdevito3/craftsman

v0.12.2

03 Dec 23:08
Compare
Choose a tag to compare

Fixed

  • Fixed bulk add file and variable names

v0.12.1

28 Nov 20:19
Compare
Choose a tag to compare

Updated

  • Removed unused response class and endpoint reference
  • Removed Consumes from Get list

v0.12.0

28 Nov 15:23
Compare
Choose a tag to compare

Release Notes

Lots and lots of updates to this release with things I've been wanting to add and more lessons learned as I continue to dogfood things.

Some of the major items in here:

  • .NET 6 scaffolding. Everything is now scaffolded using .NET 6, implicit usings, shortened namespacing, and more. I didn't consolidate Startup and Program yet, but may in v0.13.
  • In memory Authorization Server scaffolding. This is a step towards a what I hope will be a ton of time savings. You can now scaffold out an in memory duende auth server along with your new projects. It is mostly based one the official duende template, with some slight differences. For exmaple, I didn't add consent pages in yet, but has some additional features like Tailwind CSS styling for the main pages. You can easily check out an exmaple with...
  • A new new:example command. I wanted to make it really easy to see examples for different types of scenarios, so I added a new command to easily get something together. Just runcraftsman new:example and follow the prompts!
  • All entities will now inherit from a BaseEntitiy that has a standardized Id Guid for your primary key and audit fields as well. These will be updated for you OOTB in db context now.

There's so much more as well. I think the project scaffolding is really moving in a good direction and is getting closer to a more stable position. Lots to add still, but it's at least starting to feel more mature.

As always, check out the docs for updates.

Also, I started a discord channel if you want to come join us! Feel free to reach out if you have any questions or issues.

🚀 Additions and Updates

  • Added BaseEntity that all entities will inherit from.

    • Contains a Guid of Id marked as the primary key
    • Contains CreatedOn, CreatedBy, LastModifiedOn, and LastModifiedBy properties
  • Added a CurrentUserService to add a user to the CreatedBy and LastModifiedBy properties if a user is found. Built into db context

  • Added built in features to the add:feature command

  • New AddListByFk option for the add:feature command and Feature property of an entity.

  • New craftsman example or craftsman new:example command to create an example project with a prompted workflow to select. Basic, WithAuth, AuthServer, WithBus

  • Added .DS_Store and .env to gitignore

  • Added Consumer test

  • Added provider to test fixture when adding a bus

  • Added a mock IPublishEndpoint service to TestFixture when using MassTransit

    • update docs that mediatr handler tests aren't broken when pubilshing anymore
  • New policies added to swagger on add:entity scaffolding

  • New add:authserver command as well as an AuthServer option when creating a domain

    • No consent support (yet)
  • Added helper GetService method to TestFixture

  • Added Creation and Update Validators back to scaffolding. Easy enough to delete if you aren't using them

  • Added a NamingConvention property to the db template

    • options are:
      Class
      SnakeCase
      LowerCase
      CamelCase
      UpperCase
      
  • Updated to .NET 6

  • Updated nuget packages

    • Inlcudes a major release of Fluent Assertions that required updates to:
      • Functional test assertions (use HttpStatusCode.XXX)
      • Integration tests TestBase update for postgresto include 1.Seconds()
      • Integration test updates to await act.Should().ThrowAsync< where appropriate
  • Moved Policies to Feature

  • There is no more primary key property. A Guid with a name Id will be inherited by all entities.

  • Docker utilities for integration test refactored to use Fluent Docker wherever possible for better readability. Some enhancements were made as well (e.g. better container/volume naming, proper volume mounting).

  • Removed ErrorHandlerMiddleware and replaced it with ErrorHandlerFilterAttribute

    • Updated built in Exceptions
    • Updated thrown errors and associated tests in the features
  • Cleaned up test names

  • Modified CORS util to take in env

  • Added Secret back to Environment options

  • Added local config utilities for testing environments

  • Remove UseInMemoryDb app setting in favor of environment specific checks

  • Remove UseInMemoryBus app setting in favor of environment specific checks

  • Using statement shortening for reset function in test fixture

  • Consolidated multiple environments startups to one startup file

  • Update logging registration in Program.cs to no longer rely on appsettings

  • Updated FK support to better API

  • Moved env config from appsettings to environment variables

  • Production env no longer added by default

  • Features now include missing cancellation tokens as well as AsNoTracking properties

  • Removed automatic fluent validation to allow more control in domain operations. For example:

    var validator = new RecipeForCreationDtoValidator();
    validator.ValidateAndThrow(recipeForCreationDto);
    • this can be turned back on in WebApiServiceExtension by updating .AddFluentValidation(cfg => { cfg.AutomaticValidationEnabled = false; });

🐛 Pest Control

  • Removed the broken patch validation from command
  • No more 409 produced response annotation on POST
  • Descending sort tests now actually test desc instead of mirroring asc
  • Removed error handler comments in controller
  • Empty controller no longer added when no features present (fixes #40)
  • Messages project will be properly referenced when using a bus
  • Swagger policies won't get duplicates

v0.11.1

11 Sep 16:12
Compare
Choose a tag to compare

fix: removed extra ) from endpoint names

v0.11.0

23 Aug 01:56
Compare
Choose a tag to compare

Release Notes

This release has a lot of little cleanup items, as I've had the opportunity to dogfood this a bit and find a bunch of things that need fixing. I still plan on bringing in some of the big heavy hitting wins in v0.12.

Of note for this release was consolidating the 3 bounded context projects into one single project to promote simplicity and not prematurely optimizing. Additionally, there is a new add:feature command to quickly scaffold new features. More on this coming in v0.12.

As always, check out the docs for updates.

🚀 Additions and Updates

  • Added an add:feature command (also works with new:feature)
  • Non-nullable guids will now have a default of Guid.NewGuid() unless otherwise specified
  • Added XML docs to release in csproj
  • Added a new features option to entities to allow for granular feature control. The accepted values are AdHoc, GetRecord, GetList, DeleteRecord, UpdateRecord, PatchRecord, AddRecord, and CreateRecord (same as AddRecord but available as an alias in case you can't remember!)
  • Instead of 3 BC projects (Core, Infra, Api) there will now be one. This helps with colocation and does force premature optimization for something like a model library and a heavily separated infra project.
    • Features dir changed to Domain with a features directory inside of it
    • Entities live on their respective entity folder in the domain with their feature
    • Removed the webapi suffix on the api project
    • Core directories moved to web api
    • Contexts dir changed to Databases
  • Removed save successful checks on add and update commands
  • Added better naming to PUT command variables
  • Guid PKs will no longer be added to the creation DTO
  • POST commands will no longer have a conflict check since you can't add a PK anymore
  • A conflict integration test will not be added anymore
  • NoKeyGenerated commands are no longer in dbcontext
  • Controller url all lowercase
  • Swagger comments on by default
  • 409 no longer shown on swagegr comments for POST
  • No more save successful check on delete command
  • Seeders have a sub DummyData directory
  • Sieve service registration moved to webapi service class
  • SolutionName to ProjectName

🐛 Pest Control

  • Seeder indentation in startup fixed
  • PUT commands will no longer throw 500 when entity is not modified (#31)
  • Route indentation fixed
  • Removed annoying comments from features
  • Fixed test name for basic gets in functional tests
  • Seeders in startup will newline when there are multiple entities
  • Unicode now onlyenforced on windows (for better emoji support)
  • Fixed isRequired property
  • Command prop for Update command has proper casing

🗑 Removed

Removed the add:property cli - command

v0.10.0

31 May 13:42
Compare
Choose a tag to compare

Huge release incoming! It includes a ton of stuff. Most notably:

  • Added a slew of event scaffolding capabilities and updated the docs with examples
  • Updated the CLI to use Spectre Console
  • Updated everything to be in one solution

🚀 Additions and Updates

Additions

  • Added SpectreConsole for a better CLI experience
  • Added add:bus command
  • Added add:consumer and add:producer commands for direct, topic, and fanout messages
  • Added Bus, Producers, and Consumers props to BC template
  • Added Messages to the domain template
  • Added add:message command
  • Added conflict test for add command when using a guid
  • Added tests for command and query exceptions
    • Didn't do them in the controller as that is not the dependency. Can test the exceptions causing the correct httpstatus code in the exception separately

Updates

  • Changed the new:domain output to a single solution with directories for each bounded context for easier management
  • Changed the seeder regions in StartupDevelopment.cs to comments
  • Changed the Logger settings in Program.cs
  • Updated add:entity and add:prop to now be called from the BC directory
  • Updated ProducesResponseType in controllers to generic Response type where applicable
  • Updated App Registrations to separate files
  • Updated Service Registrations to separate files
  • Updated entity name and entity prop names first letter to always be capitalized
  • Better namespacing for features in controllers using static classes for features
  • Updated functional test to pass without conflict
  • Updated nuget packages
  • Updated Program.cs to async
  • Changed migrations to happen after all bounded contexts are added

🗑 Removed

  • Removed verbosity option from commands due to simplified spectre console
  • Removed legacy comment for include statement marker
  • Removed BC readme and updated sln readme

🐛 Pest Control

  • Fixed double error messages
  • Fixed incorrect help message for new:domain command (#24)
  • Fixed help text on list command
  • Fixed controllers to inherit from ControllerBase instead of Controller. fixes (#26)
  • Fixed extra space in the class in the dto classes when not abstract and trailing new line
  • If using a guid for a PK, it will be added to the creation dto (not manipulation or update) -- fixes #28
    • Guid PKs will have a default value of Guid.NewGuid() in their creation dto
  • PK already exists guard will be added for GUIDs and will be performed when adding a new entity and throw a 409 conflict via a new conflict exception if a record already exists with that guid. -- fixes #29
  • Fixed issue where POST would throw 500 when primary key != EntityNameId (e.g. PK of ReportId would break for an entity of ReportRequest) fixes #30
  • Fixed default value for strings on entities to use quotes
  • Fixed missing exception handling on add:bc command

v0.9.3

11 Apr 02:10
Compare
Choose a tag to compare

Release Notes

🐛 Pest Control

  • Removed autogen identity attribute and added explicit onmodelcreating callout for it (#23)

v0.9.2

10 Apr 20:53
Compare
Choose a tag to compare

Release Notes

🐛 Pest Control

  • Lingering DbContext/Db Name issue

v0.9.1

10 Apr 19:52
Compare
Choose a tag to compare

Release Notes

🐛 Pest Control

  • Db context will now be used instead of name in api scaffolding (#21)
  • Test utilities in functional tests will now be added when not using auth (#20)

v0.9.0

10 Apr 17:07
Compare
Choose a tag to compare

Release Notes

🚀 Additions and Updates

  • Added a new vertical slice architecture
    • Projects have been consolidated and will now have a prefix of the solution name before each project type. For example, the api project with a solution name of ordering is ordering.webapi
  • Added a new:domain command to create a ddd based domain with various bounded contexts inside of it. this is recommended for long term maintainability
  • Added the add:bc command which will add a new bounded context to your ddd project
  • Testing completely rebuilt from the ground up. Now has unit, integration, and functional tests. Integration and Functional Tests can spin up their own docker db on their own to run against a real database.
  • Moved 'addGit' property from the api template to the domain template
  • Added a version or -v command to get the craftsman version
  • Added an initial db migration to run automatically on project creation
  • Added verbosity option to new domain and add bc
  • Added a version checker to make sure you are alerted if out of date
  • Added an add:prop alias
  • Added explicit add entity template with auth policies available to add
  • Added a production app settings by default
  • Changed the startup marker for dynamic services to a comment instead of a region
  • Readme will now be generated in the domain directory
  • Updated environment to have production as a reserved word instead of startup to be consistent with dotnet process
    • Will use startup and appsettings.production
    • Normal appsettings will be empty, but have all the config keys required to make migrations and builds possible
  • Updated the default Cors policy name
  • Consolidated launchsettings to have the same setup for all environments as it is just a setting for the IDE and not used for the release package
  • Removed micro command to consolidate and reduce complexity. if you still want to build a microservice, you can build a domain and deploy each bounded context as a microservice
    • Gateways were removed and may be added back with better integration in a future release
  • Removed the new:api command to focus on the DDD driven style
  • Removed ClientSecret to promote code+PKCE flow

🐛 Pest Control

  • Existing auth policies will now be skipped for registration when adding a new entity
  • Fixed documented response codes for delete, put, and patch from 201 > 204
  • Foreign keys will no longer be automatically included in features or DTOs for better performance (#2)

🧹 Housekeeping

  • Upgraded craftsman to net 5