# MasaFinance Shared Library

This is a shared library for MasaFinance microservices that provides common utilities, DTOs, interfaces, and services that can be used across all microservices.

## Features

- **Common DTOs**: Shared data transfer objects for consistent API contracts
- **Interfaces**: Common interfaces for type safety across services
- **Utilities**: Helper functions and utilities
- **Constants**: Shared constants and enums
- **Decorators**: Custom decorators for validation and metadata
- **Guards**: Authentication and authorization guards
- **Interceptors**: Common interceptors for logging, error handling, etc.
- **Filters**: Exception filters for consistent error responses

## Installation

```bash
# Install dependencies
npm install

# Build the library
npm run build

# Run tests
npm test

# Lint code
npm run lint

# Format code
npm run format
```

## Usage

### In other microservices

```bash
# Install the shared library
npm install @masa-finance/shared-lib

# Or use local path for development
npm install file:../lib
```

### Import and use

```typescript
import { 
  ApiResponse, 
  UserDto, 
  LoggerService,
  JwtAuthGuard,
  ValidationPipe 
} from '@masa-finance/shared-lib';
```

## Project Structure

```
src/
├── common/           # Common utilities and helpers
│   ├── constants/    # Shared constants
│   ├── decorators/   # Custom decorators
│   ├── filters/      # Exception filters
│   ├── guards/       # Authentication guards
│   ├── interceptors/ # Request/response interceptors
│   └── utils/        # Utility functions
├── dto/              # Shared DTOs
│   ├── auth/         # Authentication DTOs
│   ├── user/         # User-related DTOs
│   ├── transaction/  # Transaction DTOs
│   └── balance/      # Balance DTOs
├── interfaces/       # Shared interfaces
├── services/         # Shared services
│   ├── logger/       # Logging service
│   ├── auth/         # Authentication service
│   └── validation/   # Validation service
└── index.ts          # Main export file
```

## Development

### Adding new shared components

1. Create the component in the appropriate directory
2. Export it from the main `index.ts` file
3. Update the README if necessary
4. Add tests for the new component
5. Build and test the library

### Testing

```bash
# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Run tests with coverage
npm run test:cov
```

## Contributing

1. Follow the existing code style and patterns
2. Add tests for new functionality
3. Update documentation as needed
4. Ensure all tests pass before submitting

## License

MIT 