Skip to content

Commit c5d39db

Browse files
author
vitex
committed
Add WARP.md configuration file for AI assistance
- Comprehensive documentation for Warp AI to work effectively in this repository - Includes development commands for testing, code quality, and evidence class generation - Documents core architecture: RO/RW base classes and evidence system - Covers auto-generation process unique to this AbraFlexi API client - Incorporates coding standards from GitHub Copilot instructions - Provides implementation patterns and configuration options
1 parent 6f68d38 commit c5d39db

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

WARP.md

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
# WARP.md
2+
3+
This file provides guidance to WARP (warp.dev) when working with code in this repository.
4+
5+
## Project Overview
6+
7+
PHP AbraFlexi is a PHP 8.1+ library for easy interaction with the Czech economic system AbraFlexi. It provides a complete REST API client with object-oriented interface for all AbraFlexi evidences (entities).
8+
9+
## Development Commands
10+
11+
### Package Management
12+
```bash
13+
composer install # Install dependencies
14+
composer update # Update dependencies
15+
composer require <package> # Add new dependency
16+
```
17+
18+
### Testing
19+
```bash
20+
phpunit # Run all tests
21+
phpunit --testsuite=all # Run full test suite
22+
phpunit tests/src/AbraFlexi/ActionsTest.php # Run specific test
23+
```
24+
25+
### Code Quality
26+
```bash
27+
vendor/bin/php-cs-fixer fix # Fix code style issues
28+
vendor/bin/php-cs-fixer fix --dry-run # Check code style without fixing
29+
vendor/bin/phpstan analyze # Run static analysis
30+
```
31+
32+
### Evidence Classes Generation
33+
```bash
34+
cd tools/
35+
./update_all.sh # Update evidence classes from AbraFlexi API
36+
./force_update_all.sh # Force update all classes regardless of version
37+
```
38+
39+
## Core Architecture
40+
41+
### Class Hierarchy
42+
43+
The library follows a layered architecture with these core base classes:
44+
45+
- **`RO` (Read Only)**: Base class for reading data from AbraFlexi
46+
- Located: `src/AbraFlexi/RO.php`
47+
- Handles HTTP communication, authentication, and data parsing
48+
- Contains curl operations, URL building, and response processing
49+
50+
- **`RW` (Read Write)**: Extends RO for write operations
51+
- Located: `src/AbraFlexi/RW.php`
52+
- Adds insert, update, delete functionality
53+
- Supports transactions (`atomic` mode) and dry-run testing
54+
55+
### Evidence System
56+
57+
AbraFlexi uses "evidences" (entities/records). Each evidence has:
58+
- Auto-generated class derived from RO or RW
59+
- Class naming: evidence name converted to PascalCase (e.g., `faktura-vydana``FakturaVydana`)
60+
- Each class defines `$evidence` property with the API endpoint name
61+
62+
### Evidence Class Generation
63+
64+
Classes are auto-generated from AbraFlexi API using tools in `tools/` directory:
65+
- `update_evidencelist_class.php` - Updates available evidences
66+
- `update_properties_class.php` - Updates field definitions
67+
- `update_actions_class.php` - Updates available actions
68+
- `generate_evidence_classes.php` - Generates individual evidence classes
69+
70+
### Configuration
71+
72+
Connection can be configured via:
73+
1. Constants: `ABRAFLEXI_URL`, `ABRAFLEXI_LOGIN`, `ABRAFLEXI_PASSWORD`, `ABRAFLEXI_COMPANY`
74+
2. Environment variables with same names
75+
3. Constructor parameters (highest priority)
76+
77+
### Data Types
78+
79+
The library automatically converts AbraFlexi data types to PHP equivalents:
80+
- `date``\DateTime`
81+
- `datetime``\DateTime`
82+
- `integer``int`
83+
- `numeric``float`
84+
- `logic``bool`
85+
- `relation``\AbraFlexi\Relation`
86+
87+
## Testing Infrastructure
88+
89+
### Test Configuration
90+
- Bootstrap: `tests/bootstrap.php`
91+
- Configuration: `phpunit.xml`
92+
- Test server: Uses demo.flexibee.eu by default, configurable via `.env`
93+
94+
### Test Structure
95+
- Unit tests in `tests/src/AbraFlexi/`
96+
- Each main class should have corresponding test
97+
- Tests extend base test classes for consistency
98+
99+
## Code Standards
100+
101+
### From GitHub Copilot Instructions:
102+
- **PHP Version**: PHP 8.4 or later
103+
- **Code Style**: PSR-12 coding standard
104+
- **Documentation**: Include docblocks for all functions and classes with parameters and return types
105+
- **Type Hints**: Always include type hints for parameters and return types
106+
- **Internationalization**: Use `_()` functions for translatable strings
107+
- **Security**: Never expose sensitive information
108+
- **Testing**: Create/update PHPUnit tests for new/modified classes
109+
- **Comments**: Write in English using complete sentences
110+
- **Variables**: Use meaningful, descriptive names
111+
- **Constants**: Define constants instead of magic numbers/strings
112+
- **Error Handling**: Handle exceptions properly with meaningful messages
113+
114+
### Code Formatting
115+
The project uses `friendsofphp/php-cs-fixer` with custom configuration in `.php-cs-fixer.dist.php`.
116+
117+
## Project Structure
118+
119+
```
120+
src/AbraFlexi/ # Main library classes
121+
├── RO.php # Base read-only class
122+
├── RW.php # Base read-write class
123+
├── Actions.php # Available actions (auto-generated)
124+
├── EvidenceList.php # Evidence list (auto-generated)
125+
├── Relations.php # Relations between evidences (auto-generated)
126+
├── Formats.php # Supported formats (auto-generated)
127+
├── Structure.php # Evidence structure definitions
128+
└── [Evidence classes] # Individual evidence classes
129+
130+
Examples/ # Usage examples for different operations
131+
tests/ # PHPUnit tests
132+
tools/ # Code generation and update scripts
133+
static/ # Generated JSON metadata files
134+
```
135+
136+
## Important Implementation Notes
137+
138+
### Evidence Class Creation Pattern
139+
```php
140+
class NewEvidence extends \AbraFlexi\RW {
141+
public $evidence = 'evidence-name';
142+
}
143+
```
144+
145+
### Object Instantiation with Options
146+
```php
147+
$invoice = new \AbraFlexi\FakturaVydana('code:VF2-12345', [
148+
'company' => 'demo',
149+
'url' => 'https://demo.flexibee.eu',
150+
'debug' => true,
151+
'nativeTypes' => false, // Disable automatic type conversion
152+
'ignore404' => true // Don't throw exception for missing records
153+
]);
154+
```
155+
156+
### Authentication Methods
157+
1. Username/password
158+
2. AuthSessionId for web application integration
159+
3. Environment variables or constants
160+
161+
### Debug Mode Features
162+
- Validates field existence and permissions
163+
- Logs all requests/responses to `/tmp/`
164+
- Automatic error reporting with detailed information
165+
- Enhanced error messages for development
166+
167+
## Dependencies
168+
169+
- **Runtime**: PHP 8.1+, ext-json, ext-curl, ext-gettext, vitexsoftware/ease-core
170+
- **Development**: PHPUnit, PHP-CS-Fixer, PHPStan, Phing
171+
172+
## License
173+
174+
MIT License - allows commercial use and modification.

0 commit comments

Comments
 (0)