{"id":21623035,"url":"https://github.com/pandatecham/be-lib-base-converter","last_synced_at":"2025-07-17T10:31:03.749Z","repository":{"id":162063100,"uuid":"626107906","full_name":"PandaTechAM/be-lib-base-converter","owner":"PandaTechAM","description":"Base 10 to 36 and vice versa converter","archived":false,"fork":false,"pushed_at":"2024-06-24T11:03:00.000Z","size":244,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"development","last_synced_at":"2024-06-24T12:35:25.187Z","etag":null,"topics":["converter","pandatech"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PandaTechAM.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-10T20:15:35.000Z","updated_at":"2024-06-24T11:01:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"7de30060-6f5b-48fe-ac07-c64c64dcbf76","html_url":"https://github.com/PandaTechAM/be-lib-base-converter","commit_stats":null,"previous_names":["pandatecham/be-lib-base-converter"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PandaTechAM%2Fbe-lib-base-converter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PandaTechAM%2Fbe-lib-base-converter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PandaTechAM%2Fbe-lib-base-converter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PandaTechAM%2Fbe-lib-base-converter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PandaTechAM","download_url":"https://codeload.github.com/PandaTechAM/be-lib-base-converter/tar.gz/refs/heads/development","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226248344,"owners_count":17595159,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["converter","pandatech"],"created_at":"2024-11-25T00:11:21.115Z","updated_at":"2024-11-25T00:11:21.621Z","avatar_url":"https://github.com/PandaTechAM.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pandatech.BaseConverter\n\n`Pandatech.BaseConverter` is a powerful library designed for seamless base conversion between base 10 and base 36\nnumeral systems. It addresses the common need in software development to obfuscate database primary keys stored as long\nintegers by converting them into base 36 encoded strings, enhancing data confidentiality and avoiding direct exposure of\nentity IDs.\n\n## Features\n\n- **Bidirectional Conversion**: Convert numbers between base 10 and base 36.\n- **Custom Character Set**: Configure the base 36 character set for tailored encoding.\n- **DTO Integration**: Simplify base 36 string usage in Data Transfer Objects (DTOs).\n- **Batch Conversion**: Convert lists of numbers between base 10 and base 36 efficiently.\n- **Swagger Support**: Integrate with Swagger for API documentation and testing.\n- **Validation**: Ensure data integrity with robust validation for base 36 inputs.\n- **Error Handling**: Clear and informative exceptions for invalid inputs.\n\n## Installation\n\nAdd `Pandatech.BaseConverter` to your project via NuGet:\n\n```shell\nInstall-Package Pandatech.BaseConverter\n```\n\n## Basic Usage\n\n### Converting between Base 10 and Base 36\n\n```csharp\nlong number = 12345;\nstring base36Number = PandaBaseConverter.Base10ToBase36(number);\n// Output: \"9ix\"\n\nstring base36Number = \"9ix\";\nlong? number = PandaBaseConverter.Base36ToBase10(base36Number);\n// Output: 12345\n\nlong number = PandaBaseConverter.Base36ToBase10NotNull(base36Number);\n// Output: 12345\n\nvar numbers = new List\u003clong\u003e { 12345, 67890 };\nvar base36Numbers = PandaBaseConverter.Base10ListToBase36List(numbers);\n// Output: [\"9ix\", \"1bqj\"]\n\nvar base36Numbers = new List\u003cstring\u003e { \"9ix\", \"1bqj\" };\nvar numbers = PandaBaseConverter.Base36ListToBase10List(base36Numbers);\n// Output: [12345, 67890]\n```\n\n## Advanced Usage\n\n### Customizing Base 36 Character Set\n\nCustomize the base 36 character set for your needs:\n\n```csharp\nvar builder = WebApplication.CreateBuilder(args);\nvar customCharset = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nbuilder.Services.ConfigureBaseConverter(customCharset);\n```\n\n### DTO Integration\n\nDecorate DTO properties to handle automatic base 36 encoding/decoding:\n\n```csharp\npublic class MyDto\n{\n    [PropertyBaseConverter]\n    public long Id { get; set; }\n}\n```\n\n### Minimal API Parameter Binding\n\nUse `QueryBaseConverter` and `PathBaseConverter` to automatically convert base 36 encoded parameters in minimal APIs:\n\n```csharp\nvar builder = WebApplication.CreateBuilder(args);\nvar app = builder.Build();\n\nvar groupApp = app.MapGroup(\"minimal\");\ngroupApp.MapGet(\"query\", ([FromQuery] long id) =\u003e id)\n        .QueryBaseConverter(\"id\");\n\ngroupApp.MapGet(\"path/{id}\", (long id) =\u003e id)\n        .PathBaseConverter(\"id\");\n\ngroupApp.MapPost(\"parameter\", ([AsParameters] Parameter request) =\u003e request)\n            .QueryBaseConverter(\"Prop1\", \"Prop2\");\n\napp.Run();\n\npublic class Parameter\n{\n    public long Prop1 { get; set; }\n    public long Prop2 { get; set; }\n}\n```\n\n### Controller Parameter Binding\n\nResolve base 36 encoded parameters in controller actions using `[ParameterBaseConverter]`:\n\n```csharp\n[ApiController]\n[Route(\"api\")]\npublic class ConverterController : ControllerBase\n{\n    [HttpGet(\"query\")]\n    public IActionResult GetFromQuery([ParameterBaseConverter, FromQuery] long id)\n    {\n        return Ok(id);\n    }\n\n    [HttpGet(\"path/{id}\")]\n    public IActionResult GetFromPath([ParameterBaseConverter] long id)\n    {\n        return Ok(id);\n    }\n}\n```\n\n### Swagger Integration\n\nIntegrate with Swagger for enhanced API documentation:\n\n```csharp\nbuilder.Services.AddSwaggerGen(\n    options =\u003e\n    {\n        options.AddBaseConverterFilters();\n    }\n);\n```\n\n## Error Handling\n\n`Pandatech.BaseConverter` provides informative exceptions for handling various errors. Here's how you can manage them:\n\n### Supported Exceptions\n\n- **`UnsupportedCharacterException`**: Thrown when the input contains characters not supported by the current base 36\n  character set.\n\n```csharp\n    try\n    {\n        var result = PandaBaseConverter.Base36ToBase10(\"invalid-input\");\n    }\n    catch (UnsupportedCharacterException ex)\n    {\n        Console.WriteLine(ex.FullMessage);\n        // Output: \"Message: Input contains unsupported characters. with Value: invalid-input\"\n    }\n```\n\n- **`InputValidationException`**: Thrown when input validation fails, such as a negative number for base 10 to base 36\n  conversion.\n\n```csharp\n    try\n    {\n        var base36Number = PandaBaseConverter.Base10ToBase36(-12345);\n    }\n    catch (InputValidationException ex)\n    {\n        Console.WriteLine(ex.FullMessage);\n        // Output: \"Message: Number must be non-negative. with Value: -12345\"\n    }\n```\n\n- **`BaseConverterException`**: The base exception class for all custom exceptions in this library, providing\n  a `FullMessage` property that includes both the message and the associated value.\n\n```csharp\n    try\n    {\n        // Some operation that might fail\n    }\n    catch (BaseConverterException ex)\n    {\n        Console.WriteLine(ex.FullMessage);\n    }\n ```\n\nThese exceptions ensure that your applications can gracefully handle and debug errors related to base conversions.\n\n## Contributing\n\nContributions are welcome! If you have suggestions for improvements or encounter any issues, please feel free to open an\nissue or submit a pull request.\n\n## License\n\nThis project is licensed under the MIT License. Feel free to use, modify, and distribute it as per the license terms.\n\nThank you for choosing `Pandatech.BaseConverter` for your base conversion needs!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpandatecham%2Fbe-lib-base-converter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpandatecham%2Fbe-lib-base-converter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpandatecham%2Fbe-lib-base-converter/lists"}