SEO link-building marketplace: Laravel → .NET migration
- Business modules
- 15
- Users migrated without loss
- 40+
- DDD bounded contexts
- 2
Task
Port a link-building marketplace from Laravel + Vue to .NET + Angular, keeping all users and balances, and add the modules the original lacked.
Solution
Clean Architecture + CQRS with a separate Identity bounded context, an internal wallet, moderation, order chat, and SignalR notifications; physical data migration with verification.
Architecture
Buyers (SEO specialists) create projects, pick sites from a catalog, and order link placements; sellers (webmasters) accept orders, publish links, and confirm publication. Money is held in an internal wallet and moves to the seller only after confirmation; new sites go through moderation and ownership verification; each order has its own chat, reviews, and ratings.
Registration and login live in a separate Identity module with its own Domain/Application/Infrastructure projects and its own Postgres schema and migration history — so business data can be wiped or rebuilt without losing accounts. Balance moved out of the user entity into a Wallet aggregate, because money belongs to the marketplace, not to identity.
Existing data was migrated physically: tables were moved to the new schema with ALTER TABLE … SET SCHEMA, so every foreign key kept working and 40+ existing users kept their balances to the cent. Command and query handlers are covered by xUnit + Moq tests; the HTTP pipeline is tested with WebApplicationFactory against a real PostgreSQL in Testcontainers.
