Compare commits

..

4 Commits

4 changed files with 147 additions and 2 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@
/.idea/modules.xml
/.idea/rifalto.iml
/.idea/vcs.xml
.aider*

View File

@ -1,10 +1,10 @@
FROM python:3.11-slim-buster
FROM python:3.13-slim
RUN pip install --no-cache-dir gunicorn
WORKDIR /rifalto
COPY requirements.txt /rifalto
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install --root-user-action ignore --no-cache-dir -r requirements.txt
RUN rm requirements.txt
EXPOSE 5000

143
README.md Normal file
View File

@ -0,0 +1,143 @@
# Rifalto - Sistema de Rifas
Um sistema web para gerenciamento de rifas e vendas de números, desenvolvido em Flask.
## Descrição
O Rifalto é uma aplicação web que permite:
- Criação e gerenciamento de rifas
- Venda de números por vendedores autenticados
- Reserva de números pelos compradores
- Controle de estoque de números disponíveis
- Backup automático do banco de dados
## Instalação
### Usando Docker (Recomendado)
1. Clone o repositório
2. Configure o arquivo de configuração (veja seção de Configuração)
3. Execute com Docker:
```bash
docker build -t rifalto .
docker run -p 5000:5000 -v $(pwd)/instance:/rifalto/instance rifalto
```
### Instalação Local
1. Clone o repositório
2. Instale as dependências:
```bash
pip install -r requirements.txt
```
3. Configure as variáveis de ambiente:
```bash
export FLASK_APP=rifaserver.app
```
4. Execute a aplicação:
```bash
./start.sh
```
## Configuração
### Arquivo de Configuração
Crie um arquivo `instance/config.json` na raiz do projeto com as seguintes configurações:
```json
{
"SECRET_KEY": "sua-chave-secreta-aqui",
"REDIRECT_ROOT_URL": "https://seu-site.com"
}
```
**Parâmetros de configuração:**
- `SECRET_KEY`: Chave secreta para sessões Flask (será gerada automaticamente se não fornecida)
- `REDIRECT_ROOT_URL`: URL para redirecionamento da página raiz (opcional)
### Variáveis de Ambiente
Você também pode configurar usando variáveis de ambiente com prefixo `FLASK_`:
```bash
export FLASK_SECRET_KEY="sua-chave-secreta"
export FLASK_REDIRECT_ROOT_URL="https://seu-site.com"
```
## Comandos CLI
### Criar Vendedor
```bash
flask create-seller <username> <password>
```
### Criar Rifa
```bash
flask cria-rifa "<descrição da rifa>"
```
### Alterar Senha
```bash
flask muda-senha <usuario> <nova_senha>
```
## Estrutura do Banco de Dados
O sistema usa SQLite por padrão e cria automaticamente as seguintes tabelas:
- `sellers`: Vendedores do sistema
- `purchases`: Compras/vendas realizadas
- `raffles`: Rifas disponíveis
- `tickets`: Números reservados
## Backup
O sistema realiza backup automático do banco de dados a cada hora, salvando os arquivos na pasta `instance/backup/`.
## Desenvolvimento
### Executar Testes
```bash
pytest test/
```
### Migrações do Banco
```bash
flask db upgrade
```
## Estrutura de Arquivos
```
rifalto/
├── rifaserver/ # Código principal da aplicação
│ ├── app.py # Aplicação Flask principal
│ ├── models.py # Modelos do banco de dados
│ ├── templates/ # Templates HTML
│ └── static/ # Arquivos estáticos (CSS, JS)
├── migrations/ # Migrações do banco de dados
├── test/ # Testes automatizados
├── instance/ # Arquivos de configuração e dados
│ ├── config.json # Configuração da aplicação
│ ├── raffle.db # Banco de dados SQLite
│ └── backup/ # Backups automáticos
├── requirements.txt # Dependências Python
├── Containerfile # Configuração Docker
└── start.sh # Script de inicialização
```
## Licença
[Adicione informações de licença aqui]

View File

@ -68,6 +68,7 @@ def create_app():
app.config['SECRET_KEY'] = secrets.token_hex()
print(f"Using generated key {app.config['SECRET_KEY']}")
_config['SECRET_KEY'] = app.config['SECRET_KEY']
os.makedirs(app.instance_path, exist_ok=True)
with open(config_filename, 'w') as f:
json.dump(_config, f)
db.init_app(app)