Ejercicio: Desarrollo de características de código mediante herramientas de GitHub Copilot
Usted y su compañero de trabajo se reúnen para discutir sus objetivos para la aplicación de biblioteca. Quiere mejorar la experiencia del usuario para los bibliotecarios y los clientes. Se describen varias características nuevas que se pueden agregar a la aplicación.
Acepta trabajar con las siguientes características:
Disponibilidad del libro: Habilite un bibliotecario para determinar el estado de disponibilidad de un libro. Esta característica debe mostrar un mensaje que indica si un libro está disponible para el préstamo o la fecha de vencimiento de devolución si el libro está actualmente en préstamo a otro patrón.
Préstamos de libros: Permitir que un bibliotecario preste un libro a un patrón (si el libro está disponible). Esta característica debe mostrar la opción de que un cliente reciba un libro en préstamo, actualice Loans.json con el nuevo préstamo y muestre los detalles del préstamo para el patrón.
Reservación de libros: Permitir que un bibliotecario reserve un libro para un patrón (a menos que el libro ya esté reservado). Esta característica debe implementar un nuevo proceso de reserva de libros. Esta característica puede requerir la creación de un nuevo archivo Reservations.json junto con las nuevas clases e interfaces necesarias para admitir el proceso de reserva.
Cada una de ellas trabajará en una de las nuevas características y, a continuación, volverá a agruparse. Trabajará en la característica para determinar el estado de disponibilidad de un libro. Su compañero de trabajo trabajará en la característica para prestar un libro a un patrón. La última característica, para reservar un libro para un patrón, se desarrollará después de que se completen las otras dos características.
Durante este ejercicio, completará las siguientes tareas:
Cree una rama de "disponibilidad de libros" en el repositorio de código.
Desarrollar una nueva característica de "disponibilidad de libros".
- Use sugerencias de GitHub Copilot para ayudar a implementar el código de forma más rápida y precisa.
- Sincronice las actualizaciones del código a la rama "disponibilidad de libros" del repositorio remoto.
Cree una solicitud de incorporación de cambios para combinar los cambios en la rama principal del repositorio.
Creación de una rama en el repositorio
Antes de empezar a desarrollar la nueva característica "disponibilidad de libros", debe crear una nueva rama en el repositorio. Esto le permite trabajar en la nueva característica sin afectar a la rama principal del repositorio. Puede combinar la nueva característica en la rama principal cuando esté lista.
Completa los siguientes pasos para usar esta sección del ejercicio:
Asegúrese de que tiene abierta la solución AccelerateDevGitHubCopilot en Visual Studio Code.
Seleccione la vista Control de código fuente y asegúrese de que el repositorio local está sincronizado con el repositorio remoto (Extracción o Sincronización).
En la esquina inferior izquierda de la ventana, seleccione principal.
Para crear una nueva rama, escribe disponibilidad de libro y después selecciona + Crear nueva rama.
Para insertar la nueva rama en el repositorio remoto, seleccione Publicar rama.
Desarrollo de una característica que permite a un bibliotecario determinar el estado de disponibilidad de un libro
En esta sección del ejercicio, usará GitHub Copilot para ayudarle a implementar una nueva característica para la aplicación de biblioteca. La nueva característica permite a un bibliotecario determinar el estado de disponibilidad de un libro.
La característica de disponibilidad del libro debe incluir las siguientes actualizaciones de código:
- Agregue una nueva acción
SearchBooksaCommonActions. - Actualice el método
WriteInputOptionsen ConsoleApp.cs. Agregue compatibilidad con la nueva opciónCommonActions.SearchBooks. Muestra la opción para comprobar si hay un libro disponible para el préstamo. - Actualice el método
ReadInputOptionsen ConsoleApp.cs. Agregue compatibilidad con la nueva opciónCommonActions.SearchBooks. - Actualice el método
PatronDetailsen ConsoleApp.cs. AgregueCommonActions.SearchBooksaoptionsantes de llamar aReadInputOptions. Agregue unelse ifpara controlar la acciónSearchBooks. El bloqueelse ifdebe llamar a un nuevo método denominadoSearchBooks. - Cree un nuevo método
SearchBooksen ConsoleApp.cs. El métodoSearchBooksdebe leer un título de libro proporcionado por el usuario. Compruebe si un libro está disponible para el préstamo y muestre un mensaje que indique "book.titleestá disponible para el préstamo" o "book.titleestá en préstamo a otro patrón. La fecha de vencimiento de devolución esloan.DueDate.
Completa los siguientes pasos para usar esta sección del ejercicio:
Abra la vista EXPLORADOR DE SOLUCIONES.
Abra el archivo CommonActions.cs y seleccione la enumeración
CommonActions.Debe agregar una nueva acción de
SearchBooksaCommonActions.Abra el chat en línea y escriba el siguiente símbolo del sistema:
Update selection to include a new `SearchBooks` action.GitHub Copilot debe sugerir una actualización de código que agregue la nueva acción
SearchBooksa la enumeraciónCommonActions.Revise la actualización sugerida y seleccione Aceptar.
public enum CommonActions { Repeat = 0, Select = 1, Quit = 2, SearchPatrons = 4, RenewPatronMembership = 8, ReturnLoanedBook = 16, ExtendLoanedBook = 32, SearchBooks = 64 }Abra el archivo ConsoleApp.cs.
Busque y, a continuación, seleccione el método
WriteInputOptions.Debe agregar compatibilidad con la nueva opción
CommonActions.SearchBooks. Muestra la opción para comprobar si hay un libro disponible para el préstamo.Abra el chat en línea y escriba el siguiente símbolo del sistema:
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 debe sugerir una actualización de código que agregue un nuevo bloque de
ifpara la acciónSearchBooks.Revise la actualización sugerida y seleccione Aceptar.
La actualización sugerida debe ser similar al siguiente fragmento de código:
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."); } }Desplácese hacia arriba ligeramente para buscar y, a continuación, seleccione el método
ReadInputOptions.Debe agregar compatibilidad con la nueva opción
CommonActions.SearchBooks. Incluya un caso que controle al usuario seleccionando la acciónSearchBooks.Abra el chat en línea y escriba el siguiente símbolo del sistema:
Update selection to include an option for the `CommonActions.SearchBooks` action.GitHub Copilot debe sugerir una actualización de código que agregue un nuevo
caseque controle al usuario la selección de la acciónSearchBooks.Revise la actualización sugerida y seleccione Aceptar.
La actualización sugerida debe ser similar al siguiente fragmento de código:
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; }Desplácese hacia abajo para buscar y, a continuación, seleccione el método
PatronDetails.Hay dos cosas que debe realizar:
- Debe agregar
CommonActions.SearchBooksaoptionsantes de llamar aReadInputOptions. - También debe agregar un
else ifpara controlar la acciónSearchBooks. El bloqueelse ifdebe llamar a un nuevo método denominadoSearchBooks.
Puede abordar ambos juntos.
- Debe agregar
Abra el chat en línea y escriba el siguiente símbolo del sistema:
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 debe sugerir una actualización de código que agregue
CommonActions.SearchBooksaoptionsantes de llamar aReadInputOptions.Revise la actualización sugerida y seleccione Aceptar.
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."); }Nota:
Las sugerencias de chat en línea también pueden crear código auxiliar para el método
SearchBooks.Dedique un minuto a tener en cuenta los requisitos de proceso para el método
SearchBooks.¿Qué necesita hacer el método? ¿Qué debe devolver? ¿Requiere parámetros?
El método
SearchBooksdebe implementar el siguiente proceso:Pida al usuario un título de libro.
Lea el título del libro proporcionado por el usuario.
Compruebe si hay un libro disponible para el préstamo
Muestra un mensaje que indica una de las siguientes opciones:
- "
book.titleestá disponible para préstamo" - "
book.titleestá en préstamo a otro patrón. La fecha de vencimiento de devolución esloan.DueDate.
- "
Para compilar las opciones de mensaje, el código tendrá que acceder a los siguientes archivos JSON:
-
Books.jsones necesario para buscar losTitleyBookIdcoincidentes. -
Loans.jsones necesario para encontrar elReturnDateyDueDatepara el coincidenteBookItemId. ElBookItemIdes el mismo que elBookIddeBooks.json.
Asegúrese de que tiene el siguiente método
SearchBookscreado en el archivo ConsoleApp.cs:async Task<ConsoleState> SearchBooks() { return ConsoleState.PatronDetails; }Nota:
Asegúrese de quitar los comentarios de código creados por GitHub Copilot. Los comentarios innecesarios e inexactos pueden influir negativamente en las sugerencias de GitHub Copilot.
Seleccione el método
SearchBooks.Abra el chat en línea y escriba el siguiente símbolo del sistema:
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 debe sugerir una actualización de código que capture el título del libro proporcionado por el usuario.
Revise la actualización sugerida y seleccione Aceptar.
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; }Seleccione el método
SearchBooks.Nota:
GitHub Copilot puede crear un método independiente para controlar la entrada del usuario de un título de libro. Puede seguir desarrollando la lógica principal en el método
SearchBooks.Abra la vista Chat.
Agrega los siguientes archivos al contexto de chat: ConsoleApp.cs, JsonData.cs, JsonLoanRepository.cs, Books.json, Loans.json, BookItems.json,.
Escriba lo siguiente:
@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`".Dedique un minuto a revisar las actualizaciones sugeridas.
GitHub Copilot debe proponer actualizaciones similares a las siguientes sugerencias:
Para actualizar el método
SearchBooksy la claseConsoleApppara buscar un título de libro que coincida en el archivoBooks.jsony comprobar si el libro está disponible para préstamo, siga estos pasos:a. Agregue un método para buscar libros por título en la clase
JsonData. b. Actualice el métodoSearchBooksde la claseConsoleApppara usar este nuevo método. c. Comprueba el estado del préstamo del libro y muestra el mensaje adecuado.Este es el código actualizado:
Paso 1: Adición de un método de búsqueda de libros por título en la clase JsonData
public class JsonData { // Existing code... public Book? SearchBookByTitle(string title) { return Books?.FirstOrDefault(b => b.Title.Equals(title, StringComparison.OrdinalIgnoreCase)); } }Paso 2: Actualización del método SearchBooks en la clase 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... }Paso 3: Actualización del archivo Program.cs para pasar JsonData a ConsoleApp
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();Con estos cambios, el método
SearchBooksde la claseConsoleAppahora buscará un libro por título en el archivoBooks.jsony comprobará si está prestado en el archivoLoans.json. Si el libro está disponible para préstamo, mostrará un mensaje que indique que el libro está disponible. Si el libro está en préstamo, mostrará un mensaje que indica que el libro está en préstamo y proporcionará la fecha de vencimiento de devolución.Agregue el método sugerido al final de la clase
JsonData.public Book? SearchBookByTitle(string title) { return Books?.FirstOrDefault(b => b.Title.Equals(title, StringComparison.OrdinalIgnoreCase)); }Utilice las actualizaciones que se sugieren para actualizar el archivo Program.cs.
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();Agregue la declaración de campo
JsonData _jsonData;a la claseConsoleAppantes del constructor de clase.Agregue un parámetro
JsonData jsonDataal constructor de claseConsoleAppy úselo para inicializar el campo_jsonDatadentro del constructor.El constructor de clase actualizado debe tener un aspecto similar al siguiente fragmento de código:
public ConsoleApp(ILoanService loanService, IPatronService patronService, IPatronRepository patronRepository, ILoanRepository loanRepository, JsonData jsonData) { _patronRepository = patronRepository; _loanRepository = loanRepository; _loanService = loanService; _patronService = patronService; _jsonData = jsonData; }Observe que JsonData no se reconoce en la clase
ConsoleApp.Debe agregar
using Library.Infrastructure.Data;a la parte superior del archivoConsoleApp.cs.Asegúrese de que la instrucción
using Library.Infrastructure.Data;se agrega al principio del archivoConsoleApp.cs.Use las sugerencias de código para actualizar el método
SearchBooks:El código que se sugiere debe usar una consulta LINQ para buscar el libro por título. Si se encuentra el libro, se usa otra consulta LINQ para determinar si está prestado. El código también incluye lógica para mostrar el estado de disponibilidad del libro en función de los resultados de la búsqueda. La lógica que se usa para mostrar mensajes de respuesta se puede implementar de varias maneras. En el siguiente fragmento de código se proporciona un ejemplo.
El fragmento de código siguiente muestra una posible implementación del método
SearchBooks: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; }Seleccione el método
SearchBooks.Abra la vista Chat y escriba la siguiente solicitud:
Explain the LINQ queries and the evaluation of the book's availability status.Dedique un minuto a revisar la explicación proporcionada por GitHub Copilot.
Para la consulta que comprueba si el libro está en préstamo, deberías ver una descripción similar a la siguiente explicación:
**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.Compruebe la lógica implementada por el Compruebe si el libro está en la consulta de préstamos.
Operador condicional Null: El operador
?.es un operador condicional null. Garantiza que si_jsonData.Loansesnull, toda la expresión se evaluará comonullsin iniciar unNullReferenceException.Expresión lambda: La expresión lambda
l => l.BookItemId == book.Id && l.ReturnDate == nulldefine la condición para el métodoFirstOrDefault. Comprueba cadaloanobjetolpara ver si suBookItemIdcoincide con elIddel objetobooky si suReturnDateesnull.Este código intenta encontrar el primer
loande la colección_jsonData.Loansdonde elBookItemIdcoincide con elIddelbookespecificado y elReturnDateesnull. Si no se encuentra esteloano si_jsonData.Loansesnull,loanse establecerá ennull.Nota:
La mayoría de las bibliotecas modernas tienen varias copias del mismo libro. Este código supone que solo hay una copia de cada libro. Si la biblioteca tiene varias copias del mismo libro, el código deberá actualizarse para gestionar varios préstamos para el mismo libro. Para los fines de este entrenamiento, suponemos que solo hay una copia de cada libro y que la lógica proporcionada es suficiente.
Compile la solución para asegurarse de que no hay errores.
Verá mensajes de advertencia, pero no debería haber ningún error.
Para compilar la solución en la vista Explorador de soluciones, haga clic con el botón derecho en AccelerateDevGitHubCopilot y seleccione Compilar.
Sincronización de los cambios con el repositorio remoto
Seleccione la vista Control de código fuente.
Asegúrese de que los archivos que ha actualizado se enumeran en Cambios.
Use GitHub Copilot para generar un mensaje para el Confirmar.
Para almacenar provisionalmente y confirmar los cambios, seleccione Confirmar y, a continuación, seleccione Sí.
Sincronización (o inserción) de los cambios en el repositorio remoto.
Comprobar el trabajo
En esta sección del ejercicio, completará las siguientes tareas:
- Compruebe que la nueva característica determina correctamente el estado de disponibilidad de un libro.
- Cree una solicitud de incorporación de cambios para combinar los cambios en la rama principal del repositorio.
Compruebe que la nueva característica funciona según lo previsto
Dado que no tiene pruebas automatizadas, se pueden usar pruebas manuales para comprobar que la nueva característica funciona según lo previsto. El uso de un origen de datos que se puede comprobar es importante. En este caso, se usan los archivos Books.json y Loans.json para comprobar que la nueva característica informa del estado de disponibilidad de un libro correctamente.
Completa los siguientes pasos para usar esta sección del ejercicio:
Abra la vista Explorador de soluciones.
Para ejecutar la aplicación, haga clic con el botón derecho en Library.Console, seleccione Depurar y, a continuación, seleccione Iniciar nueva instancia.
Cuando se le solicite un nombre de patrón, escriba One y presione Entrar.
Debería ver una lista de clientes que coinciden con la consulta de búsqueda.
En el símbolo del sistema "Opciones de entrada", escriba 2 y presione Entrar.
Al escribir 2, se selecciona el segundo patrón de la lista.
Debería ver el nombre del patrón y el estado de suscripción seguido de los detalles del préstamo del libro.
En el símbolo del sistema "Opciones de entrada", escriba b y presione Entrar.
Al escribir b selecciona la opción para buscar el estado de disponibilidad de un libro.
Debería ver un mensaje para escribir un título de libro.
Escriba Book One y presione Entrar.
En los datos originales que descargó, Book One está actualmente en préstamo para Patron Forty-Nine, por lo que no debería estar disponible.
Compruebe que la aplicación muestra un mensaje que indica que el libro está en préstamo a otro patrón.
Compruebe que Book Nine ha sido devuelto por Patron One.
En el ejercicio anterior, durante una prueba de la aplicación Biblioteca, había Patrón One devolver Book Nine. Si la aplicación muestra que Book Nine no ha sido devuelto por Patron One, use las opciones de entrada para seleccionar y devolver Book Nine antes de continuar.
Nota:
El archivo
Library.Console.csprojgarantiza que los archivos de datos JSON se copien en el directorio de salida cuando se compila la aplicación. Sin embargo, la realización de operaciones de limpieza o recompilación básicamente restablecerá los datos. Las operaciones de compilación repetidas no restablecen los datos en el directorio de salida (/bin/Debug/net8.0/).En el símbolo del sistema "Opciones de entrada", escriba b y presione Entrar.
Escriba Book Nine y presione Entrar.
Compruebe que la aplicación muestra un mensaje que indica que el libro está disponible para el préstamo.
En el símbolo del sistema "Opciones de entrada", escriba q y presione Entrar.
Detenga la sesión de depuración.
Abra el archivo
Loans.json.El archivo
Loans.jsonse utiliza para realizar un seguimiento del estado del préstamo de cada libro. Puede usar el archivoLoans.jsonpara comprobar que el estado de disponibilidad de Book One y Book Nine es correcto.El archivo
Loans.jsonactualizado debe encontrarse en la carpetaLibrary.Console\bin\Debug\net8.0\JsonoLibrary.Console\Json.Si usa el depurador de Visual Studio Code para ejecutar la aplicación, el archivo
Loans.jsonactualizado debe encontrarse en la carpetaLibrary.Console\bin\Debug\net8.0\Json.Si usa un comando
dotnet runde la carpetaAccelerateDevGitHubCopilot\src\Library.Console>para ejecutar la aplicación, el archivo deLoans.jsonactualizado debe encontrarse en la carpetaLibrary.Console\Json.
Compruebe que el id. de préstamo 37 y el id. de préstamo 46 son para el Libro Uno (
"BookItemId": 1).- El id. de préstamo 37 debe tener un valor de
ReturnDate(2024-01-17) - El id. de préstamo 46 no debe tener un valor
ReturnDate. El valorReturnDatedebe sernull.
El valor
ReturnDatese utiliza para determinar si el libro está actualmente en préstamo. Si el valorReturnDateesnull, el libro se considera que está en préstamo.- El id. de préstamo 37 debe tener un valor de
Compruebe que el id. de préstamo 22 es para el Libro Nueve (
"BookItemId": 9) y que el valor deReturnDateestá establecido en la fecha actual.Si está ejecutando en el depurador y ha limpiado la solución después de realizar cambios en el archivo
Loans.json, se perderán esos cambios. Después de limpiar la solución, el archivoLoans.jsonse restablece a los datos originales la próxima vez que ejecute la aplicación. Puede actualizar manualmente el archivoLoans.jsonpara probar el estado de disponibilidad de Book One y Book Nine.
Creación de una solicitud de incorporación de cambios para combinar los cambios en la rama principal
Ha completado la nueva característica que permite a un bibliotecario determinar el estado de disponibilidad de un libro. Ahora debe combinar los cambios en la rama principal del repositorio. Puede crear una solicitud de incorporación de cambios para combinar los cambios en la rama principal.
Completa los siguientes pasos para usar esta sección del ejercicio:
Abra el repositorio de GitHub en un explorador web.
Abra la pestaña Solicitudes de incorporación de cambios.
Seleccione Nueva solicitud de incorporación de cambios.
En Comparar cambios, asegúrese de que la base esté configurada para la rama principal.
Asegúrese de que comparación esté configurado para la rama de disponibilidad de libros.
Después de configurar las ramas, se muestra una comparación de los cambios entre principal y disponibilidad de libros. Debería ver los cambios de todos y cada uno de los archivos que ha actualizado.
Seleccione Crear solicitud de incorporación de cambios.
Escriba un título y una descripción para la solicitud de incorporación de cambios.
Puede usar el siguiente título y descripción:
- Título: proeza: Agregar funcionalidad de búsqueda para libros en ConsoleApp
-
Descripción: Esta solicitud de incorporación de cambios agrega una nueva característica que permite a un bibliotecario determinar el estado de disponibilidad de un libro. La característica incluye una nueva acción de
SearchBooksenCommonActions, actualizaciones de los métodosWriteInputOptions,ReadInputOptions, yPatronDetailsenConsoleApp, y agrega un nuevo método deSearchBooksenConsoleApp.
Nota:
Los miembros de una empresa con una suscripción a GitHub Copilot Enterprise pueden usar GitHub Copilot para generar un resumen de una solicitud de incorporación de cambios en GitHub.com. Puede usar el resumen para ayudar a los revisores a comprender los cambios, o para comprender rápidamente los cambios realizados en una solicitud de incorporación de cambios que esté revisando. Seleccione Acciones de GitHub y, después, Resumen para generar un resumen de la solicitud de cambios.
Este es un ejemplo de un resumen de solicitudes de incorporación de cambios que se generó mediante una cuenta de GitHub Copilot Enterprise:
Asegúrese de que el título y la descripción reflejen las actualizaciones del código y, a continuación, seleccione Crear solicitud de incorporación de cambios.
Espere a que se completen las comprobaciones y compruebe que todas las comprobaciones pasadas y que no haya conflictos con la rama base.
Las comprobaciones pueden tardar un minuto en completarse. Debe solucionar cualquier problema que se identifique antes de poder combinar los cambios en la rama principal.
Para combinar los cambios en la rama principal, seleccione Solicitud de incorporación de cambios de mezcla y, a continuación, seleccione Confirmar combinación.
Tenga en cuenta que puede eliminar la rama
book-availabilitydespués de combinar los cambios.Abra Visual Studio Code.
Cambie a la rama principal del repositorio.
Extraer los cambios del repositorio remoto.
Compruebe que los cambios realizados en la rama de disponibilidad de librosestén ahora en la rama principal.