Cvičení – vývoj funkcí kódu pomocí nástrojů GitHub Copilot
Vy a váš spolupracovník se scházíte a proberete své cíle pro aplikaci knihovny. Chcete zlepšit uživatelské prostředí pro knihovníky a patrony. Proberete několik nových funkcí, které je možné přidat do aplikace.
Souhlasíte s prací na následujících funkcích:
Dostupnost knihy: Povolte knihovníku, aby určil stav dostupnosti knihy. Tato funkce by měla zobrazit zprávu, že je kniha k dispozici pro půjčku nebo termín splatnosti, pokud je kniha aktuálně na půjčce jinému patronu.
Knihy půjčky: Povolit knihovníku zapůjčení knihy pro patrona (pokud je kniha k dispozici). Tato funkce by měla zobrazit možnost pro patrona dostat knihu o půjčce, aktualizovat Loans.json s novou půjčkou a zobrazit aktualizované podrobnosti o půjčce pro patrona.
Rezervace knih: Umožňuje knihovníku rezervovat knihu pro patrona (pokud není kniha již rezervována). Tato funkce by měla implementovat nový proces rezervace knih. Tato funkce může vyžadovat vytvoření nového souboru Reservations.json spolu s novými třídami a rozhraními potřebnými k podpoře procesu rezervace.
Každý z vás bude pracovat na jedné z nových funkcí a pak znovu seskupí. Na této funkci budete pracovat a určíte stav dostupnosti knihy. Váš spolupracovník bude pracovat na funkci půjčování knihy pro patrona. Poslední funkce, která si rezervuje knihu pro patrona, bude vyvinuta po dokončení dalších dvou funkcí.
Během tohoto cvičení provedete následující úkoly:
Vytvořte větev "dostupnost knihy" v úložišti kódu.
Vytvořte novou funkci "dostupnost knih".
- Pomocí návrhů GitHub Copilotu můžete kód implementovat rychleji a přesněji.
- Synchronizujte aktualizace kódu do větve "dostupnost knih" vzdáleného úložiště.
Vytvořte žádost o přijetí změn pro sloučení změn do hlavní větve úložiště.
Vytvoření nové větve v úložišti
Než začnete s vývojem nové funkce "dostupnost knih", musíte v úložišti vytvořit novou větev. To vám umožní pracovat na nové funkci, aniž by to mělo vliv na hlavní větev úložiště. Až bude nová funkce připravená, můžete ji sloučit do hlavní větve.
K dokončení této části cvičení použijte následující kroky:
Ujistěte se, že máte otevřené řešení AccelerateDevGitHubCopilot v editoru Visual Studio Code.
Vyberte zobrazení správy zdrojového kódu a ujistěte se, že je místní úložiště synchronizované se vzdáleným úložištěm (vyžádat nebo synchronizovat).
V levém dolním rohu okna vyberte hlavní.
Pokud chcete vytvořit novou větev, zadejte dostupnost knihy a pak vyberte + Vytvořit novou větev.
Pokud chcete novou větev odeslat do vzdáleného úložiště, vyberte Publikovat větev.
Vývoj funkce, která knihovníku umožňuje určit stav dostupnosti knihy
V této části cvičení použijete GitHub Copilot k implementaci nové funkce pro aplikaci knihovny. Nová funkce umožňuje knihovníku určit stav dostupnosti knihy.
Funkce dostupnosti knihy by měla obsahovat následující aktualizace kódu:
- Přidat novou
SearchBooksakci doCommonActions. - Aktualizujte metodu
WriteInputOptionsv ConsoleApp.cs. Přidání podpory pro novouCommonActions.SearchBooksmožnost Umožňuje zobrazit možnost zkontrolovat, jestli je kniha k dispozici pro půjčku. - Aktualizujte metodu
ReadInputOptionsv ConsoleApp.cs. Přidání podpory pro novouCommonActions.SearchBooksmožnost - Aktualizujte metodu
PatronDetailsv ConsoleApp.cs. PřidatCommonActions.SearchBookspředoptionsvolánímReadInputOptions. Přidejte objektelse ifpro zpracováníSearchBooksakce. Blokelse ifby měl volat novou metodu s názvemSearchBooks. - V ConsoleApp.cs vytvořte novou
SearchBooksmetodu. MetodaSearchBooksby měla přečíst název knihy poskytnuté uživatelem. Zkontrolujte, jestli je kniha k dispozici pro půjčku, a zobrazte zprávu s informací, že "book.titleje k dispozici pro půjčku", nebo "book.titleje na půjčku jinému patronu. Termín vrácení splatnosti jeloan.DueDate.
K dokončení této části cvičení použijte následující kroky:
Otevřete zobrazení PRŮZKUMNÍKA ŘEŠENÍ.
Otevřete soubor CommonActions.cs a vyberte výčt
CommonActions.Je třeba přidat novou
SearchBooksakci doCommonActions.Otevřete vložený chat a zadejte následující výzvu:
Update selection to include a new `SearchBooks` action.GitHub Copilot by měl navrhnout aktualizaci kódu, která přidá novou
SearchBooksakci do výčtuCommonActions.Zkontrolujte navrženou aktualizaci a pak vyberte Přijmout.
public enum CommonActions { Repeat = 0, Select = 1, Quit = 2, SearchPatrons = 4, RenewPatronMembership = 8, ReturnLoanedBook = 16, ExtendLoanedBook = 32, SearchBooks = 64 }Otevřete soubor ConsoleApp.cs.
Vyhledejte a pak vyberte metodu
WriteInputOptions.Pro novou
CommonActions.SearchBooksmožnost je potřeba přidat podporu. Umožňuje zobrazit možnost zkontrolovat, jestli je kniha k dispozici pro půjčku.Otevřete vložený chat a zadejte následující výzvu:
Update selection to include an option for the `CommonActions.SearchBooks` action. Use the letter "b" and the message "to check for book availability".GitHub Copilot by měl navrhnout aktualizaci kódu, která přidá nový
ifblok akceSearchBooks.Zkontrolujte navrženou aktualizaci a pak vyberte Přijmout.
Navrhovaná aktualizace by měla být podobná následujícímu fragmentu kódu:
static void WriteInputOptions(CommonActions options) { Console.WriteLine("Input Options:"); if (options.HasFlag(CommonActions.ReturnLoanedBook)) { Console.WriteLine(" - \"r\" to mark as returned"); } if (options.HasFlag(CommonActions.ExtendLoanedBook)) { Console.WriteLine(" - \"e\" to extend the book loan"); } if (options.HasFlag(CommonActions.RenewPatronMembership)) { Console.WriteLine(" - \"m\" to extend patron's membership"); } if (options.HasFlag(CommonActions.SearchPatrons)) { Console.WriteLine(" - \"s\" for new search"); } if (options.HasFlag(CommonActions.SearchBooks)) { Console.WriteLine(" - \"b\" to check for book availability"); } if (options.HasFlag(CommonActions.Quit)) { Console.WriteLine(" - \"q\" to quit"); } if (options.HasFlag(CommonActions.Select)) { Console.WriteLine("Or type a number to select a list item."); } }Posuňte se mírně nahoru, abyste našli a pak vyberte metodu
ReadInputOptions.Pro novou
CommonActions.SearchBooksmožnost je potřeba přidat podporu. Uveďte případ, který zpracovává uživatele, kterýSearchBooksakci vybere.Otevřete vložený chat a zadejte následující výzvu:
Update selection to include an option for the `CommonActions.SearchBooks` action.GitHub Copilot by měl navrhnout aktualizaci kódu, která přidá nový
case, který zpracovává uživatele,SearchBookskterý akci vybere.Zkontrolujte navrženou aktualizaci a pak vyberte Přijmout.
Navrhovaná aktualizace by měla být podobná následujícímu fragmentu kódu:
static CommonActions ReadInputOptions(CommonActions options, out int optionNumber) { CommonActions action; optionNumber = 0; do { Console.WriteLine(); WriteInputOptions(options); string? userInput = Console.ReadLine(); action = userInput switch { "q" when options.HasFlag(CommonActions.Quit) => CommonActions.Quit, "s" when options.HasFlag(CommonActions.SearchPatrons) => CommonActions.SearchPatrons, "m" when options.HasFlag(CommonActions.RenewPatronMembership) => CommonActions.RenewPatronMembership, "e" when options.HasFlag(CommonActions.ExtendLoanedBook) => CommonActions.ExtendLoanedBook, "r" when options.HasFlag(CommonActions.ReturnLoanedBook) => CommonActions.ReturnLoanedBook, "b" when options.HasFlag(CommonActions.SearchBooks) => CommonActions.SearchBooks, _ when int.TryParse(userInput, out optionNumber) => CommonActions.Select, _ => CommonActions.Repeat }; if (action == CommonActions.Repeat) { Console.WriteLine("Invalid input. Please try again."); } } while (action == CommonActions.Repeat); return action; }Posuňte se dolů a vyhledejte a vyberte metodu
PatronDetails.Je potřeba udělat dvě věci:
- Před voláním musíte přidat
CommonActions.SearchBooksoptions.ReadInputOptions - Musíte také přidat pro
else ifzpracováníSearchBooksakce. Blokelse ifby měl volat novou metodu s názvemSearchBooks.
Obě tyto možnosti můžete řešit společně.
- Před voláním musíte přidat
Otevřete vložený chat a zadejte následující výzvu:
Update selection to add `CommonActions.SearchBooks` to `options` before calling `ReadInputOptions`. Add an `else if` block to handle the `SearchBooks` action. The `else if` block should call a new method named `SearchBooks`.GitHub Copilot by měl navrhnout aktualizaci kódu, která se přidá
CommonActions.SearchBookspředoptionsvolánímReadInputOptions.Zkontrolujte navrženou aktualizaci a pak vyberte Přijmout.
async Task<ConsoleState> PatronDetails() { Console.WriteLine($"Name: {selectedPatronDetails.Name}"); Console.WriteLine($"Membership Expiration: {selectedPatronDetails.MembershipEnd}"); Console.WriteLine(); Console.WriteLine("Book Loans:"); int loanNumber = 1; foreach (Loan loan in selectedPatronDetails.Loans) { Console.WriteLine($"{loanNumber}) {loan.BookItem!.Book!.Title} - Due: {loan.DueDate} - Returned: {(loan.ReturnDate != null).ToString()}"); loanNumber++; } CommonActions options = CommonActions.SearchPatrons | CommonActions.Quit | CommonActions.Select | CommonActions.RenewPatronMembership | CommonActions.SearchBooks; CommonActions action = ReadInputOptions(options, out int selectedLoanNumber); if (action == CommonActions.Select) { if (selectedLoanNumber >= 1 && selectedLoanNumber <= selectedPatronDetails.Loans.Count()) { var selectedLoan = selectedPatronDetails.Loans.ElementAt(selectedLoanNumber - 1); selectedLoanDetails = selectedPatronDetails.Loans.Where(l => l.Id == selectedLoan.Id).Single(); return ConsoleState.LoanDetails; } else { Console.WriteLine("Invalid book loan number. Please try again."); return ConsoleState.PatronDetails; } } else if (action == CommonActions.Quit) { return ConsoleState.Quit; } else if (action == CommonActions.SearchPatrons) { return ConsoleState.PatronSearch; } else if (action == CommonActions.RenewPatronMembership) { var status = await _patronService.RenewMembership(selectedPatronDetails.Id); Console.WriteLine(EnumHelper.GetDescription(status)); // reloading after renewing membership selectedPatronDetails = (await _patronRepository.GetPatron(selectedPatronDetails.Id))!; return ConsoleState.PatronDetails; } else if (action == CommonActions.SearchBooks) { return await SearchBooks(); } throw new InvalidOperationException("An input option is not handled."); }Poznámka:
Návrhy vloženého chatu mohou také vytvořit zástupný kód pro metodu
SearchBooks.Zvažte požadavky na proces pro metodu za minutu
SearchBooks.Co tato metoda potřebuje? Co by se mělo vrátit? Vyžaduje parametry?
Metoda
SearchBooksby měla implementovat následující proces:Vyzvat uživatele k zadání názvu knihy.
Přečtěte si název knihy zadaný uživatelem.
Kontrola, jestli je kniha k dispozici pro půjčku
Zobrazí zprávu s jednou z následujících možností:
- "
book.titleje k dispozici pro půjčku" - " je
book.titlena půjčce jinému patronu. Termín vrácení splatnosti jeloan.DueDate.
- "
Pokud chcete vytvořit možnosti zprávy, bude váš kód potřebovat přístup k následujícím souborům JSON:
-
Books.jsonje zapotřebí k nalezení shodyTitleaBookId. -
Loans.jsonje zapotřebí k nalezeníReturnDateshodyDueDatea pro odpovídajícíBookItemId. JeBookItemIdto stejné jako vBookIdBooks.json.
Ujistěte se, že jste v souboru ConsoleApp.cs vytvořili následující
SearchBooksmetodu:async Task<ConsoleState> SearchBooks() { return ConsoleState.PatronDetails; }Poznámka:
Nezapomeňte odebrat všechny komentáře ke kódu vytvořené GitHub Copilotem. Nepotřebné a nepřesné komentáře můžou negativně ovlivnit návrhy GitHub Copilotu.
Vyberte metodu
SearchBooks.Otevřete vložený chat a zadejte následující výzvu:
Update selection to obtain a book title. Prompt the user to "Enter a book title to search for". Read the user input and ensure the book title isn't null.GitHub Copilot by měl navrhnout aktualizaci kódu, která zachycuje název knihy zadané uživatelem.
Zkontrolujte navrženou aktualizaci a pak vyberte Přijmout.
async Task<ConsoleState> SearchBooks() { string? bookTitle = null; while (String.IsNullOrWhiteSpace(bookTitle)) { Console.Write("Enter a book title to search for: "); bookTitle = Console.ReadLine(); } // Perform book search logic here return ConsoleState.PatronDetails; }Vyberte metodu
SearchBooks.Poznámka:
GitHub Copilot může vytvořit samostatnou metodu pro zpracování uživatelského vstupu názvu knihy. V metodě můžete pokračovat v vývoji primární logiky
SearchBooks.Otevřete zobrazení chatu.
Do kontextu chatu přidejte následující soubory: ConsoleApp.cs, JsonData.cs, JsonLoanRepository.cs, Books.json, Loans.json, BookItems.json, .
Zadejte následující výzvu:
@workspace Explain how to update the `SearchBooks` method and ConsoleApps class to find a matching book title in the `Books.json` file. Use the user supplied book title to find a matching book. If a book is found, use Loans.json to check if the book is available for loan. If the book has been returned, display a message stating "`book.title` is available for loan". If the book is on loan, display a message stating "`book.title` is on loan to another patron. The return due date is `loan.DueDate`".Projděte si navrhované aktualizace.
GitHub Copilot by měl navrhnout aktualizace podobné následujícím návrhům:
Pokud chcete aktualizovat metodu
SearchBooksaConsoleApptřídu, aby v souboru našli odpovídající názevBooks.jsonknihy a zkontrolovali, jestli je kniha k dispozici pro půjčku, postupujte takto:a. Přidejte metodu pro hledání knih podle názvu ve
JsonDatatřídě. b) Aktualizujte metoduSearchBooksConsoleAppve třídě tak, aby používala tuto novou metodu. c. Zkontrolujte stav půjčky knihy a zobrazte příslušnou zprávu.Tady je aktualizovaný kód:
Krok 1: Přidání metody pro vyhledávání knih podle názvu ve třídě JsonData
public class JsonData { // Existing code... public Book? SearchBookByTitle(string title) { return Books?.FirstOrDefault(b => b.Title.Equals(title, StringComparison.OrdinalIgnoreCase)); } }Krok 2: Aktualizace metody SearchBooks ve třídě ConsoleApp
public class ConsoleApp { // Existing fields... JsonData _jsonData; public ConsoleApp(ILoanService loanService, IPatronService patronService, IPatronRepository patronRepository, ILoanRepository loanRepository, JsonData jsonData) { _patronRepository = patronRepository; _loanRepository = loanRepository; _loanService = loanService; _patronService = patronService; _jsonData = jsonData; } // Existing methods... async Task<ConsoleState> SearchBooks() { string bookTitle = ReadBookTitle(); Book? book = _jsonData.SearchBookByTitle(bookTitle); if (book == null) { Console.WriteLine($"No book found with title: {bookTitle}"); return ConsoleState.PatronDetails; } Loan? loan = _jsonData.Loans?.FirstOrDefault(l => l.BookItemId == book.Id && l.ReturnDate == null); if (loan == null) { Console.WriteLine($"{book.Title} is available for loan."); } else { Console.WriteLine($"{book.Title} is on loan to another patron. The return due date is {loan.DueDate}."); } return ConsoleState.PatronDetails; } // Existing methods... }Krok 3: Aktualizace Program.cs tak, aby předávala JsonData do ConsoleAppu
using Microsoft.Extensions.DependencyInjection; using Library.Infrastructure.Data; using Library.ApplicationCore; using Microsoft.Extensions.Configuration; var services = new ServiceCollection(); var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appSettings.json") .Build(); services.AddSingleton<IConfiguration>(configuration); services.AddScoped<IPatronRepository, JsonPatronRepository>(); services.AddScoped<ILoanRepository, JsonLoanRepository>(); services.AddScoped<ILoanService, LoanService>(); services.AddScoped<IPatronService, PatronService>(); services.AddSingleton<JsonData>(); services.AddSingleton<ConsoleApp>(); var servicesProvider = services.BuildServiceProvider(); var consoleApp = servicesProvider.GetRequiredService<ConsoleApp>(); consoleApp.Run().Wait();S těmito změnami
SearchBooksteď metoda veConsoleApptřídě vyhledá knihu podle názvu vBooks.jsonsouboru a zkontroluje stav půjčkyLoans.jsonv souboru. Pokud je kniha k dispozici pro půjčku, zobrazí se zpráva oznamující, že kniha je k dispozici. Pokud je kniha na půjčku, zobrazí se zpráva s informací, že kniha je na půjčku, a poskytne termín vrácení splatnosti.Přidejte navrženou metodu
JsonDatana konec třídy.public Book? SearchBookByTitle(string title) { return Books?.FirstOrDefault(b => b.Title.Equals(title, StringComparison.OrdinalIgnoreCase)); }Aktualizujte soubor Program.cs pomocí navrhovaných aktualizací.
using Microsoft.Extensions.DependencyInjection; using Library.Infrastructure.Data; using Library.ApplicationCore; using Microsoft.Extensions.Configuration; var services = new ServiceCollection(); var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appSettings.json") .Build(); services.AddSingleton<IConfiguration>(configuration); services.AddScoped<IPatronRepository, JsonPatronRepository>(); services.AddScoped<ILoanRepository, JsonLoanRepository>(); services.AddScoped<ILoanService, LoanService>(); services.AddScoped<IPatronService, PatronService>(); services.AddSingleton<JsonData>(); services.AddSingleton<ConsoleApp>(); var servicesProvider = services.BuildServiceProvider(); var consoleApp = servicesProvider.GetRequiredService<ConsoleApp>(); consoleApp.Run().Wait();JsonData _jsonData;Před konstruktor třídy přidejte deklaraci pole doConsoleApptřídy.JsonData jsonDataPřidejte parametr do konstruktoruConsoleApptřídy a použijte ho_jsonDatak inicializaci pole uvnitř konstruktoru.Aktualizovaný konstruktor třídy by měl vypadat jako následující fragment kódu:
public ConsoleApp(ILoanService loanService, IPatronService patronService, IPatronRepository patronRepository, ILoanRepository loanRepository, JsonData jsonData) { _patronRepository = patronRepository; _loanRepository = loanRepository; _loanService = loanService; _patronService = patronService; _jsonData = jsonData; }Všimněte si, že JsonData se ve
ConsoleApptřídě nerozpozná.Musíte přidat
using Library.Infrastructure.Data;na začátekConsoleApp.cssouboru.Ujistěte se, že se
using Library.Infrastructure.Data;příkaz přidá do horní částiConsoleApp.cssouboru.Pomocí návrhů kódu aktualizujte metodu
SearchBooks:Navrhovaný kód by měl použít dotaz LINQ k vyhledání knihy podle názvu. Pokud se kniha najde, použije se jiný dotaz LINQ k určení, jestli je kniha na půjčce. Kód také obsahuje logiku pro zobrazení stavu dostupnosti knihy na základě výsledků hledání. Logiku použitou k zobrazení zpráv odpovědí je možné implementovat několika způsoby. Příklad je uvedený v následujícím fragmentu kódu.
Následující fragment kódu ukazuje jednu z možných implementací
SearchBooksmetody:async Task<ConsoleState> SearchBooks() { string bookTitle = ReadBookTitle(); Book? book = _jsonData.SearchBookByTitle(bookTitle); if (book == null) { Console.WriteLine($"No book found with title: {bookTitle}"); return ConsoleState.PatronDetails; } Loan? loan = _jsonData.Loans?.FirstOrDefault(l => l.BookItemId == book.Id && l.ReturnDate == null); if (loan == null) { Console.WriteLine($"{book.Title} is available for loan."); } else { Console.WriteLine($"{book.Title} is on loan to another patron. The return due date is {loan.DueDate}."); } return ConsoleState.PatronDetails; }Vyberte metodu
SearchBooks.Otevřete zobrazení chatu a zadejte následující výzvu:
Explain the LINQ queries and the evaluation of the book's availability status.Projděte si vysvětlení, které poskytuje GitHub Copilot.
U dotazu, který zkontroluje, jestli je kniha na půjčce, by se měl zobrazit popis podobný následujícímu vysvětlení:
**Search for the Loan Status of the Book**Loan? loan = _jsonData.Loans?.FirstOrDefault(l => l.BookItemId == book.Id && l.ReturnDate == null);- _jsonData.Loans: Accesses the list of loans from the JsonData class. - ?.: The null-conditional operator ensures that if _jsonData.Loans is null, the entire expression will return null without throwing a NullReferenceException. - FirstOrDefault: A LINQ method that returns the first element in the collection that matches the specified condition, or null if no such element is found. - Lambda Expression: l => l.BookItemId == book.Id && l.ReturnDate == null - l.BookItemId == book.Id: Checks if the BookItemId of the loan matches the Id of the book being searched. - l.ReturnDate == null: Checks if the loan's ReturnDate is null, indicating that the book is currently on loan and has not been returned. - Result: If a matching loan is found, it is assigned to the loan variable. If no matching loan is found, loan is null. **Evaluation of the Book's Availability Status** After executing the LINQ queries, the method evaluates the availability status of the book: - If `loan` is `null`, the book has been returned. The method prints that the book is available for loan. - If `loan` is not `null`, the book is currently on loan (no return date). The method prints that the book is on loan and provides the date when the book should be returned.Ověřte logiku implementovanou dotazem kontrolující, zda je kniha vypůjčená.
Operátor s podmínkou null: Operátor
?.je podmíněný operátorem s hodnotou null. Zajišťuje, že pokud_jsonData.Loansjenull, celý výraz se vyhodnotí jakonullbez vyvolání znakuNullReferenceException.Výraz lambda: Výraz
l => l.BookItemId == book.Id && l.ReturnDate == nulllambda definuje podmínku pro metoduFirstOrDefault. Kontroluje každýloanobjektl, aby zjistil, zda jehoBookItemIdodpovídá objektuIdbooka zda je jeho .ReturnDatenullTento kód se pokusí najít první
loanv_jsonData.Loanskolekci, kdeBookItemIdodpovídáIddanémubookaReturnDatejenull. Pokud takováloannebyla nalezena nebo pokud_jsonData.Loansjenull,loanbude nastavena nanull.Poznámka:
Většina moderních knihoven má více kopií stejné knihy. Tento kód předpokládá, že existuje pouze jedna kopie každé knihy. Pokud knihovna obsahuje více kopií stejné knihy, bude nutné kód aktualizovat, aby zvládl více půjček pro stejnou knihu. Pro účely tohoto trénování předpokládáme, že existuje pouze jedna kopie každé knihy a že je dostatečná logika.
Sestavte řešení, abyste zajistili, že nedojde k žádným chybám.
Zobrazí se zprávy s upozorněním, ale neměly by se zde vyskytovat žádné chyby.
Chcete-li sestavit řešení v zobrazení Průzkumník řešení, klikněte pravým tlačítkem myši na AccelerateDevGitHubCopilot a pak vyberte Sestavit.
Synchronizace změn se vzdáleným úložištěm
Vyberte zobrazení Správy zdrojového kódu.
Ujistěte se, že soubory, které jste aktualizovali, jsou uvedené v části Změny.
K vygenerování zprávy pro potvrzení použijte GitHub Copilot.
Chcete-li provést fázi a potvrzení změn, vyberte Potvrdit a pak vyberte Ano.
Synchronizace (nebo nasdílení změn) do vzdáleného úložiště
Kontrola práce
V této části cvičení provedete následující úkoly:
- Ověřte, že nová funkce správně určuje stav dostupnosti knihy.
- Vytvořte žádost o přijetí změn pro sloučení změn do hlavní větve úložiště.
Ověřte, že nová funkce funguje podle očekávání.
Vzhledem k tomu, že nemáte automatizované testy, můžete ruční testování použít k ověření, že nová funkce funguje podle očekávání. Použití zdroje dat, který je možné ověřit, je důležité. V takovém případě pomocí Books.json souborů a Loans.json souborů ověříte, že nová funkce hlásí stav dostupnosti knihy správně.
K dokončení této části cvičení použijte následující kroky:
Otevřete zobrazení Průzkumník řešení.
Aplikaci spustíte tak, že kliknete pravým tlačítkem na Library.Console, vyberete Ladit a pak vyberete Spustit novou instanci.
Po zobrazení výzvy k zadání jména patrona zadejte 1 a stiskněte Enter.
Měl by se zobrazit seznam patronů, kteří odpovídají vyhledávacímu dotazu.
Na příkazovém řádku Vstupní možnosti zadejte 2 a stiskněte Enter.
Zadáním 2 vyberete druhého patrona v seznamu.
Měli byste vidět jméno a členství patrona a stav členství následovaný podrobnostmi o knihách půjčky.
Na příkazovém řádku Vstupní možnosti zadejte b a stiskněte Enter.
Zadáním příkazu b vyberete možnost vyhledat stav dostupnosti knihy.
Měla by se zobrazit výzva k zadání názvu knihy.
Zadejte Book One a stiskněte Enter.
V původních datech, která jste si stáhli, je Book One aktuálně vypůjčen Patron Forty-Nine, takže by neměl být k dispozici.
Ověřte, že aplikace zobrazí zprávu, že kniha je na půjčce jinému patronu.
Ověřte, že Book Nine byla vrácena Patronem One.
V předchozím cvičení jste při testu aplikace Knihovna nechali Patron One vrátit Book Nine. Pokud aplikace ukazuje, že Kniha Devět nebyla vrácena Patronem One, použijte vstupní možnosti k výběru a vrácení Knihy Devět předtím, než budete pokračovat.
Poznámka:
Soubor
Library.Console.csprojzajistí, že se datové soubory JSON při sestavení aplikace zkopírují do výstupního adresáře. Provádění operací vyčištění nebo opětovného sestavení však v podstatě resetuje data. Opakované operace sestavení neobnovují data ve výstupním adresáři (/bin/Debug/net8.0/).Na příkazovém řádku Vstupní možnosti zadejte b a stiskněte Enter.
Zadejte Book Nine a stiskněte Enter.
Ověřte, že aplikace zobrazí zprávu, že kniha je k dispozici pro půjčku.
Na příkazovém řádku Vstupní možnosti zadejte q a stiskněte Enter.
Zastavte ladicí relaci.
Otevřete soubor
Loans.json.Soubor
Loans.jsonslouží ke sledování stavu půjčky každé knihy. Pomocí tohoto souboru můžeteLoans.jsonověřit, jestli je stav dostupnosti knihy One a Book Nine správný.Aktualizovaný
Loans.jsonsoubor by se měl nacházet veLibrary.Console\bin\Debug\net8.0\Jsonsložce neboLibrary.Console\Jsonve složce.Pokud ke spuštění aplikace používáte ladicí program editoru Visual Studio Code, měl by se aktualizovaný
Loans.jsonsoubor nacházet veLibrary.Console\bin\Debug\net8.0\Jsonsložce.Pokud ke spuštění aplikace používáte
dotnet runpříkaz zeAccelerateDevGitHubCopilot\src\Library.Console>složky, měl by se aktualizovanýLoans.jsonsoubor nacházet veLibrary.Console\Jsonsložce.
Ověřte, že ID půjčky 37 a ID půjčky 46 jsou obě pro Book One (
"BookItemId": 1).- ID půjčky 37 by mělo mít
ReturnDatehodnotu (2024-01-17) - ID půjčky 46 by nemělo mít
ReturnDatehodnotu. HodnotaReturnDateby měla býtnull.
Hodnota
ReturnDatese používá k určení, zda je kniha aktuálně na půjčku. Pokud jeReturnDatehodnotanull, kniha je považována za půjčku.- ID půjčky 37 by mělo mít
Ověřte, že ID půjčky 22 je pro Book Nine (
"BookItemId": 9) a žeReturnDatehodnota je nastavena na dnešní datum.Pokud používáte ladicí program a po provedení změn
Loans.jsonv souboru jste řešení vyčistili, tyto změny se ztratí. Po vyčištění řešeníLoans.jsonse soubor resetuje na původní data při příštím spuštění aplikace. Soubor můžete aktualizovat ručněLoans.jsona otestovat stav dostupnosti booku One a Book Nine.
Vytvoření žádosti o přijetí změn pro sloučení změn do hlavní větve
Dokončili jste novou funkci, která knihovniči umožňuje určit stav dostupnosti knihy. Teď potřebujete sloučit změny do hlavní větve úložiště. Můžete vytvořit žádost o přijetí změn pro sloučení změn do hlavní větve.
K dokončení této části cvičení použijte následující kroky:
Otevřete úložiště GitHub ve webovém prohlížeči.
Otevřete kartu Pull Requesty.
Vyberte Nový pull request.
V části Porovnat změny se ujistěte, že je základ nakonfigurovaný pro hlavní větev.
Ujistěte se, že porovnání je nakonfigurované pro větev dostupnost knihy.
Po nakonfigurování větví se zobrazí porovnání změn mezi main a book-availability. Měly by se zobrazit změny jednotlivých souborů, které jste aktualizovali.
Vyberte Vytvořit pull request.
Zadejte název a popis žádosti o přijetí změn.
Můžete použít následující název a popis:
- Název: feat: Přidat funkci vyhledávání pro knihy v ConsoleApp
-
Popis: Tato žádost o přijetí změn přidá novou funkci, která knihovnii umožňuje určit stav dostupnosti knihy. Tato funkce obsahuje novou
SearchBooksakci vCommonActions, aktualizaceWriteInputOptions,ReadInputOptionsaPatronDetailsmetody vConsoleApp, a přidá novouSearchBooksmetodu doConsoleApp.
Poznámka:
Členové podniku s předplatným GitHub Copilot Enterprise můžou pomocí GitHub Copilotu vygenerovat souhrn žádosti o přijetí změn na GitHub.com. Souhrn můžete použít k tomu, abyste revidujícím pomohli porozumět vašim změnám nebo rychle pochopit změny v žádosti o přijetí změn, kterou kontrolujete. Vyberte GitHub Actions a pak vyberte Souhrn k vygenerování souhrnu žádosti o přijetí změn.
Tady je příklad souhrnu žádostí o přijetí změn vygenerovaného pomocí účtu GitHub Copilot Enterprise:
Ujistěte se, že název a popis odrážejí aktualizace kódu, a pak vyberte Vytvořit žádost o přijetí změn.
Počkejte, než se kontroly dokončí, a pak ověřte, že všechny kontroly proběhly a že nedošlo ke konfliktům se základní větví.
Dokončení kontrol může chvíli trvat. Před sloučením změn do hlavní větve je potřeba vyřešit všechny zjištěné problémy.
Pokud chcete sloučit změny do hlavní větve, vyberte Sloučit žádost o přijetí změn a pak vyberte Potvrdit sloučení.
Všimněte si, že větev můžete odstranit
book-availabilitypo sloučení změn.Otevřete Visual Studio Code.
Přepněte do hlavní větve úložiště.
Přetáhněte změny ze vzdáleného úložiště.
Ověřte, že změny provedené ve větvi dostupnosti knih jsou teď v hlavní větvi.