58 lines
1.7 KiB
Dart
58 lines
1.7 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import '../models/task_log_model.dart';
|
|
|
|
class TaskLogService {
|
|
FirebaseFirestore get _db => FirebaseFirestore.instance;
|
|
|
|
Stream<List<TaskLogModel>> getTaskLogs({
|
|
DateTime? from,
|
|
DateTime? to,
|
|
String? projectId,
|
|
String? userId,
|
|
}) {
|
|
Query query = _db.collection('task_logs');
|
|
|
|
if (userId != null && userId.isNotEmpty) {
|
|
query = query.where('userId', isEqualTo: userId);
|
|
}
|
|
if (projectId != null && projectId.isNotEmpty) {
|
|
query = query.where('projectId', isEqualTo: projectId);
|
|
}
|
|
|
|
if (from != null) {
|
|
query = query.where('date', isGreaterThanOrEqualTo: Timestamp.fromDate(from));
|
|
}
|
|
if (to != null) {
|
|
query = query.where('date', isLessThanOrEqualTo: Timestamp.fromDate(to));
|
|
}
|
|
|
|
return query.orderBy('date', descending: true).snapshots().map((snapshot) =>
|
|
snapshot.docs.map((doc) => TaskLogModel.fromMap(doc.id, doc.data() as Map<String, dynamic>)).toList());
|
|
}
|
|
|
|
Future<TaskLogModel?> getLatestLogForProject(String projectId) async {
|
|
final snapshot = await _db.collection('task_logs')
|
|
.where('projectId', isEqualTo: projectId)
|
|
.orderBy('date', descending: true)
|
|
.limit(1)
|
|
.get();
|
|
|
|
if (snapshot.docs.isNotEmpty) {
|
|
return TaskLogModel.fromMap(snapshot.docs.first.id, snapshot.docs.first.data());
|
|
}
|
|
return null;
|
|
}
|
|
|
|
Future<void> addTaskLog(TaskLogModel log) async {
|
|
await _db.collection('task_logs').add(log.toMap());
|
|
}
|
|
|
|
Future<void> updateTaskLog(TaskLogModel log) async {
|
|
await _db.collection('task_logs').doc(log.id).update(log.toMap());
|
|
}
|
|
|
|
Future<void> deleteTaskLog(String id) async {
|
|
await _db.collection('task_logs').doc(id).delete();
|
|
}
|
|
}
|