Skip to content

Commit ffbc8d9

Browse files
Add shorten usecase docs.
1 parent 8b4dad3 commit ffbc8d9

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

docs.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,34 @@ https://github.com/mohammadkarimi/swiftlink/blob/main/src/SwiftLink.Application/
88
https://github.com/mohammadkarimi/swiftlink/blob/main/src/SwiftLink.Application/UseCases/Links/Commands/GenerateShortCode/GenerateShortCodeCommandHandler.cs
99
https://github.com/mohammadkarimi/swiftlink/blob/main/src/SwiftLink.Application/UseCases/Links/Commands/GenerateShortCode/GenerateShortCodeValidator.cs
1010

11+
The "Shorten" use case in the SwiftLink project involves generating a shortened version of a given URL. This process is encapsulated within the GenerateShortCodeCommand and its corresponding handler, GenerateShortCodeCommandHandler. Here's a breakdown of how this use case works:
12+
13+
### GenerateShortCodeCommand
14+
This command is a record that acts as a data transfer object (DTO) for the necessary information to generate a shortened link. It includes properties such as:
15+
16+
- GroupName: Optional grouping for the link.
17+
- Url: The original URL to be shortened.
18+
- Description: A description of the link.
19+
- Title: The title of the link.
20+
- ExpirationDate: When the link should expire and become invalid.
21+
- Password: An optional password to protect the link.
22+
- BackHalf: A custom back half for the shortened URL.
23+
- Tags: A list of tags associated with the link.
24+
25+
### GenerateShortCodeCommandHandler
26+
This class handles the logic for generating a shortened link. It involves several steps:
27+
28+
Validation: It first ensures that the provided URL and other parameters meet specific criteria through the GenerateShortCodeValidator.
29+
Short Code Generation: If no custom back half is provided, it generates a unique short code for the URL using the IShortCodeGenerator service.
30+
Link Creation: It creates a new Link entity with the provided details and the generated or provided short code.
31+
Database Insertion: The new link entity is added to the database.
32+
Caching: The newly created link is cached using the ICacheProvider service, with the expiration date set accordingly.
33+
Response: It returns a Result<LinksDto> object, which includes details of the created link, such as the short code, original URL, and expiration date.
34+
Execution Flow in the Controller
35+
The LinkController class exposes an endpoint that handles the "Shorten" use case. The Shorten method in the controller:
36+
37+
Accepts a GenerateShortCodeCommand object from the request body.
38+
Passes this command to the MediatR library, which in turn finds and executes the appropriate handler (GenerateShortCodeCommandHandler).
39+
Returns an HTTP response with the result, which includes the shortened link information if the operation was successful.
40+
This use case is a core feature of the SwiftLink project, allowing users to create shorter, more manageable links that can be shared easily, tracked, and managed.
41+

0 commit comments

Comments
 (0)