diff --git a/lib/models/tag.dart b/lib/models/tag.dart new file mode 100644 index 0000000..816aada --- /dev/null +++ b/lib/models/tag.dart @@ -0,0 +1,17 @@ +class Tag { + int? id; + String? name; + + Tag({this.id, this.name}); + + Map toMap() { + return {'id': id, 'name': name}; + } + + static Tag fromMap(Map map) { + return Tag( + id: map['id'], + name: map['name'], + ); + } +} diff --git a/lib/models/tagLink.dart b/lib/models/tagLink.dart new file mode 100644 index 0000000..8501d92 --- /dev/null +++ b/lib/models/tagLink.dart @@ -0,0 +1,17 @@ +class TagLink { + int? recipeId; + int? tagId; + + TagLink({this.recipeId, this.tagId}); + + Map toMap() { + return {'recipeId': recipeId, 'tagId': tagId}; + } + + static TagLink fromMap(Map map) { + return TagLink( + recipeId: map['recipeId'], + tagId: map['tagId'], + ); + } +} diff --git a/lib/utilities/database.dart b/lib/utilities/database.dart index e7a902d..17693d6 100644 --- a/lib/utilities/database.dart +++ b/lib/utilities/database.dart @@ -2,6 +2,8 @@ import 'dart:convert'; +import 'package:reciper/models/tagLink.dart'; +import 'package:reciper/models/tag.dart'; import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; import '../models/recipe.dart'; @@ -58,7 +60,7 @@ class DatabaseService { """); db.execute(""" - CREATE TABLE RecipesTags( + CREATE TABLE TagsLinks( recipeId INTEGER, tagId INTEGER, ) @@ -86,7 +88,7 @@ class DatabaseService { ) """); await database.execute(""" - CREATE TABLE RecipesTags( + CREATE TABLE TagsLinks( recipeId INTEGER, tagId INTEGER, ) @@ -110,15 +112,50 @@ class DatabaseService { return id; } + static Future createTag(Tag tag) async { + print("CREATE"); + + final db = await DatabaseService.initializeDb(); + + final id = await db.insert('Tags', Tag(name: tag.name).toMap()); + return id; + } + static Future> getRecipes({String searchQuery = ""}) async { final db = await DatabaseService.initializeDb(); - final List> queryResult = + List> queryResult = await db.query('Recipes', where: "title LIKE '%$searchQuery%'"); return queryResult.map((e) => Recipe.fromMap(e)).toList(); } + static Future> getTags(int? recipeId) async { + final db = await DatabaseService.initializeDb(); + + List> queryResult = await db.query('Tags'); + + return queryResult.map((e) => Tag.fromMap(e)).toList(); + } + + static Future> getTagsFromRecipe(int recipeId) async { + final db = await DatabaseService.initializeDb(); + + List> recipeTagsLinks = + await db.query('TagsLinks', where: "recipeId = $recipeId"); + + List recipeTags = []; + + for (var tagLink in recipeTagsLinks) { + List> tag = + await db.query('Tags', where: "id = ${tagLink['tagId']}"); + + recipeTags.add(Tag.fromMap(tag[0])); + } + + return recipeTags; + } + static Future getRecipe(int id) async { final db = await DatabaseService.initializeDb();