Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
f61809c
add AuthorData.xlsx to SeedData Foulder
3oheil11 Jun 16, 2025
fd281fe
Move Seed Data foulder to main root project
3oheil11 Jun 16, 2025
6d56972
create foulder to write class
3oheil11 Jun 16, 2025
83e769d
create ExcelSeeder class
3oheil11 Jun 16, 2025
1498420
design and write ExcelSeeder class
3oheil11 Jun 16, 2025
4b66201
create and design Seed Data Configuration in Program File
3oheil11 Jun 16, 2025
e2a776b
Apply changes
3oheil11 Jun 16, 2025
9841b43
add migration
3oheil11 Jun 16, 2025
6cfaa95
add migration
3oheil11 Jun 16, 2025
d295972
snapahot updated
3oheil11 Jun 16, 2025
a57a48e
apply changes
3oheil11 Jun 16, 2025
cba8dab
apply changes and install Package EPPlus version 5.8.3
3oheil11 Jun 17, 2025
fcff217
Add Book Data Excel file
3oheil11 Jun 17, 2025
5b36c67
add comment to ReadAuthorsFromExcel Method
3oheil11 Jun 17, 2025
337fd87
add comment to ReadBooksFromExcel Method
3oheil11 Jun 17, 2025
7716ece
create ReadBooksFromExcel Method
3oheil11 Jun 17, 2025
d8554b0
This class is designed to separate configurations in the program.
3oheil11 Jun 17, 2025
ef522fb
Rename
3oheil11 Jun 17, 2025
a83d0e8
Rename class
3oheil11 Jun 17, 2025
6f4a07c
add Authors and Books Configuration
3oheil11 Jun 17, 2025
4383c6a
add SeedInitialData to Program
3oheil11 Jun 17, 2025
0541978
add AuthorBook Data in excel file
3oheil11 Jun 17, 2025
9d90fb4
seed log
3oheil11 Jun 17, 2025
27793e2
add Book Keyword wxcel file
3oheil11 Jun 25, 2025
014e42e
add book relation excel file
3oheil11 Jun 25, 2025
60ce36b
add category excel file
3oheil11 Jun 25, 2025
9e52a9f
add keyword excel file
3oheil11 Jun 25, 2025
9ba5f28
add ReadKeywordFromExcel method
3oheil11 Jun 25, 2025
de9dc5c
add ReadCategoryFromExcel Method
3oheil11 Jun 25, 2025
2956c65
add ReadBookRelationFromExcel method
3oheil11 Jun 25, 2025
01a2b46
add ReadBookKeywordFromExcel Method
3oheil11 Jun 25, 2025
c704aae
Apply changes
3oheil11 Jun 25, 2025
05e7bff
Updata solution
3oheil11 Jun 25, 2025
ff087d8
update class
3oheil11 Jun 25, 2025
5aa664c
add comment for authors
3oheil11 Jun 25, 2025
4e0da02
add comment for Book
3oheil11 Jun 25, 2025
748344f
add AuthorBook Initial
3oheil11 Jun 25, 2025
ac2c704
add BookKeyword initial
3oheil11 Jun 25, 2025
2b7826b
book relational initial
3oheil11 Jun 25, 2025
06d35a4
add All Initialize
3oheil11 Jun 25, 2025
6e73a4a
Update ci.yml (#100) (#104)
hootanht Jul 1, 2025
985e416
Fix Bug File DataSeeder And ExcelSeeder
Mohammad-Faraji Jul 4, 2025
d2a43e8
Conflict resolution
Mohammad-Faraji Jul 4, 2025
7b715be
Update Namespace
Mohammad-Faraji Jul 7, 2025
17a13f1
Update project documentation and refactor codebase
hootanht Jul 26, 2025
a4e87de
Enhance data seeding with error handling and logging
hootanht Jul 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions Refhub/Data/Seed/DataSeeder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
using Microsoft.EntityFrameworkCore;
using Refhub.Data.Context;
using Refhub.Data.Models;
using Refhub.Models.DTO;

namespace Refhub.Data.Seed
{
public static class DataSeeder
{
public static void SeedInitialData(IServiceProvider serviceProvider)
{
try
{
using var scope = serviceProvider.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();

db.Database.Migrate();

// Check if data already exists to avoid duplicates
if (db.Authors.Any())
{
Console.WriteLine("Database already seeded. Skipping...");
return;
}

// Author
var authorPath = Path.Combine(Directory.GetCurrentDirectory(), "SeedData", "AuthorData.xlsx");
if (File.Exists(authorPath))
{
var authors = ExcelSeeder.ReadAuthorsFromExcel(authorPath);
if (authors.Any())
{
db.Authors.AddRange(authors);
}
}

// Category (seed before books since books reference categories)
var categoryPath = Path.Combine(Directory.GetCurrentDirectory(), "SeedData", "CategoryData.xlsx");
if (File.Exists(categoryPath))
{
var categories = ExcelSeeder.ReadCategoryFromExcel(categoryPath);
if (categories.Any())
{
db.Categories.AddRange(categories);
}
}

// Keyword (seed before BookKeyword)
var keywordPath = Path.Combine(Directory.GetCurrentDirectory(), "SeedData", "KeywordData.xlsx");
if (File.Exists(keywordPath))
{
var keywords = ExcelSeeder.ReadKeywordFromExcel(keywordPath);
if (keywords.Any())
{
db.Keywords.AddRange(keywords);
}
}

// Save basic entities first
db.SaveChanges();

// Book
var bookPath = Path.Combine(Directory.GetCurrentDirectory(), "SeedData", "BookData.xlsx");
if (File.Exists(bookPath))
{
var books = ExcelSeeder.ReadBooksFromExcel(bookPath);
if (books.Any())
{
db.Books.AddRange(books);
}
}

// Save books before relationships
db.SaveChanges();

// AuthorBook
var authorBookPath = Path.Combine(Directory.GetCurrentDirectory(), "SeedData", "AuthorBookData.xlsx");
if (File.Exists(authorBookPath))
{
var authorBooks = ExcelSeeder.ReadBookAuthorFromExcel(authorBookPath);
if (authorBooks.Any())
{
db.BookAuthors.AddRange(authorBooks);
}
}

// BookKeyword
var bookKeywordPath = Path.Combine(Directory.GetCurrentDirectory(), "SeedData", "BookKeywordData.xlsx");
if (File.Exists(bookKeywordPath))
{
var bookKeywords = ExcelSeeder.ReadBookKeywordFromExcel(bookKeywordPath);
if (bookKeywords.Any())
{
db.BookKeywords.AddRange(bookKeywords);
}
}

// BookRelation
var bookRelationPath = Path.Combine(Directory.GetCurrentDirectory(), "SeedData", "BookRelationData.xlsx");
if (File.Exists(bookRelationPath))
{
var bookRelations = ExcelSeeder.ReadBookRelationFromExcel(bookRelationPath);
if (bookRelations.Any())
{
db.BookRelations.AddRange(bookRelations);
}
}

db.SaveChanges();
Console.WriteLine("Database seeding completed successfully.");
}
catch (Exception ex)
{
Console.WriteLine($"Error during database seeding: {ex.Message}");
throw;
}
}
}
}
Loading